完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
接下来贴一下主程序,主要是发送端图像显示错位和接收端接收不到数据
#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" #include "string.h" #include "ov7725.h" #include "ov7670.h" #include "tpad.h" #include "timer.h" #include "exti.h" #include "usmart.h" #include "24l01.h" /************************************************ ALIENTEK战舰STM32开发板实验35 摄像头OV7725和OV7670 实验 技术支持:www.openedv.com 淘宝店铺:http://eboard.taobao.com 关注微信公众平台微信号:"发烧友",免费获取STM32资料。 广州市星翼电子科技有限公司 作者:发烧友 @ALIENTEK ************************************************/ #define OV7725 1 #define OV7670 2 //由于OV7725传感器安装方式原因,OV7725_WINDOW_WIDTH相当于LCD的高度,OV7725_WINDOW_HEIGHT相当于LCD的宽度 //注意:此宏定义只对OV7725有效 #define OV7725_WINDOW_WIDTH 320 // <=320 #define OV7725_WINDOW_HEIGHT 240 // <=240 const u8*LMODE_TBL[6]={"Auto","Sunny","Cloudy","Office","Home","Night"};//6种光照模式 const u8*EFFECTS_TBL[7]={"Normal","Negative","B&W","Redish","Greenish","Bluish","Antique"}; //7种特效 extern u8 ov_sta; //在exit.c里 面定义 extern u8 ov_frame; //在timer.c里面定义 u8 tmp_buf[33]="abcdefghijklABCDEFGHIJKLM1234567"; u16 mycolor; u8 mycolorH,mycolorL; void OV7725_camera_refresh(void) { u32 i,j; u16 color; u8 t=0,sss=0; if(ov_sta)//有帧中断更新 { LCD_Scan_Dir(U2D_L2R);//从上到下,从左到右 LCD_Set_Window((lcddev.width-OV7725_WINDOW_WIDTH)/2,(lcddev.height-OV7725_WINDOW_HEIGHT)/2,OV7725_WINDOW_WIDTH,OV7725_WINDOW_HEIGHT);//将显示区域设置到屏幕中央 if(lcddev.id==0X1963) LCD_Set_Window((lcddev.width-OV7725_WINDOW_WIDTH)/2,(lcddev.height-OV7725_WINDOW_HEIGHT)/2,OV7725_WINDOW_HEIGHT,OV7725_WINDOW_WIDTH);//将显示区域设置到屏幕中央 LCD_WriteRAM_Prepare(); //开始写入GRAM OV7725_RRST=0; //开始复位读指针 OV7725_RCK_L; OV7725_RCK_H; OV7725_RCK_L; OV7725_RRST=1; //复位读指针结束 OV7725_RCK_H; for(i=0;i for(j=0;j OV7725_RCK_L; color=GPIOC->IDR&0XFF; //读数据 OV7725_RCK_H; color<<=8; OV7725_RCK_L; color|=GPIOC->IDR&0XFF; //读数据 OV7725_RCK_H; LCD->LCD_RAM=color; //LCD_WR_DATA(color); mycolor=color; mycolorL=mycolor&0x00ff; mycolorH=(mycolor>>8)&0x00ff; { tmp_buf[2*t]=mycolorH; tmp_buf[2*t+1]=mycolorL; sss++,t++; } if(sss==16) { while(NRF24L01_TxPacket(tmp_buf)==TX_OK); sss=0,t=0; } } } OV7725_CS=1; OV7725_RCK_L; OV7725_RCK_H; EXTI_GetITStatus(EXTI_Line8); //清除LINE8上的中断标志位 ov_sta=0; //清零帧中断标记 ov_frame++; LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向 } } int main(void) { u8 key,mode; u16 t=0; u8 tmp_buf[33]; u8 i=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 //Stm32_Clock_Init(9); delay_init(); //延时函数初始化 uart_init(115200); //串口初始化为 115200 usmart_dev.init(72); //初始化USMART LED_Init(); //初始化与LED连接的硬件接口 KEY_Init(); //初始化按键 LCD_Init(); //初始化LCD TPAD_Init(6); //触摸按键初始化 POINT_COLOR=RED; //设置字体为红色 OV7725_Init(); NRF24L01_Init(); //初始化NRF24L01 while(NRF24L01_Check())//检测不到24L01 { //LCD_ShowString(30,30,"24L01 Check Failed!"); printf("24L01 Check Failed!"); delay_ms(500); } NRF24L01_TX_Mode(); printf("24L01 Check OK!"); LED_Init(); //初始化与LED连接的硬件接口 LCD_Init(); //初始化LCD if(lcddev.id==0X6804) //强制设置屏幕分辨率为320*240.以支持3.5寸大屏 { lcddev.width=240; lcddev.height=320; } usmart_dev.init(72); //初始化USMART POINT_COLOR=RED;//设置字体为红色 while(OV7725_Init())//初始化OV7725 { printf("OV7725 Error!!"); delay_ms(200); } printf("OV7725 Init OK"); delay_ms(1500); TIM6_Int_Init(10000,7199); //10Khz计数频率,1秒钟中断 EXTI8_Init(); //使能定时器捕获 OV7725_Window_Set(OV7725_WINDOW_WIDTH,OV7725_WINDOW_HEIGHT,1); //设置窗口 OV7725_CS=0; while(1) { OV7725_camera_refresh(); //更新显示 if(i!=ov_frame) //DS0闪烁. { i=ov_frame; LED0=!LED0; } } } |
|
相关推荐
2个回答
|
|
然后接收端最后数据显示在LCD上程序编译不通过,不知道怎么解决了,求助。
#include "stm32f10x.h" #include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" #include "key.h" #include "exti.h" #include "wdg.h" #include "timer.h" #include "lcd.h" #include "rtc.h" #include "wkup.h" #include "adc.h" #include "dma.h" #include "24cxx.h" //#include "flash.h" #include "touch.h" #include "24l01.h" //Mini STM32开发板范例代码19 //无线通信实验 //发烧友@ALIENTEK //技术论坛:www.openedv.com //收发都做在一个函数里面,通过按键来确定进入发送模式,还是接收模式 int main(void) { // u8 key,mode; u16 wqh_times=4800; u8 t=0; u8 tmp_buf[33]; Stm32_Clock_Init(9);//系统时钟设置 delay_init(72); //延时初始化 uart_init(72,9600); //串口1初始化 delay_ms(200); LCD_Init(); //初始化液晶 delay_ms(200); KEY_Init(); //按键初始化 LED_Init(); //LED初始化 NRF24L01_Init(); //初始化NRF24L01 POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(30,50,200,16,16,"WarShip STM32"); LCD_ShowString(30,70,200,16,16,"NRF24L01 TEST"); LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,110,200,16,16,"2015/1/17"); while(NRF24L01_Check())//检测不到24L01 { LCD_ShowString(30,130,200,16,16,"NRF24L01 Error"); delay_ms(500); LCD_Fill(30,130,239,130+16,WHITE); delay_ms(500); LED0=!LED0;//DS0闪烁 } // LCD_ShowString(60,130,"24L01 Ready!"); // LCD_ShowString(10,150,"KEY0:RX_Mode KEY1:TX_Mode"); LCD_Fill(10,150,240,166,WHITE);//清空上面的显示 POINT_COLOR=BLUE;//设置字体为蓝色 { LCD_ShowString(30,150,200,16,16,"NRF24L01 RX_Mode"); LCD_ShowString(30,170,200,16,16,"Received DATA:"); NRF24L01_RX_Mode(); while(1) { if(wqh_times==4800) { LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向 LCD_Scan_Dir(U2D_L2R); //从上到下,从左到右 LCD_SetCursor(0x00,0x0000); //设置光标位置 LCD_WriteRAM_Prepare(); //开始写入GRAM wqh_times=0; } if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来. { //tmp_buf[32]=0;//加入字符串结束符 // LCD_ShowString(0,190,tmp_buf); for(t=0;t<16;t++) LCD_ShowString(0,190,lcddev.width-1,32,16,tmp_buf); wqh_times++; } } } } |
|
|
|
根据报错分析问题
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2569 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2365 浏览 5 评论
3210 浏览 3 评论
2837 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2789 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
668浏览 1评论
905浏览 0评论
1026浏览 0评论
671浏览 0评论
499浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 06:33 , Processed in 1.086594 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号