源码:STM32F407接收openmv传回的数据
实验器材: 探索者STM32F4开发板
实验目的: 本实验为新建工程实验,仅供大家新建工程时参考。 新建工程详细步骤,请看《STM32F4开发指南-库函数版本》第3.3节。
硬件资源: 1,串口1(波特率:115200,PA9/PA10连接在板载USB转串口芯片CH340上面)
实验现象: 本实验下载后,串口1将不停的输出t的值,打开电脑串口调试助手即可查看现象。
#include "stm32f4xx.h" #include "usart.h" #include "delay.h" #include "usart2.h" #include "usart3.h" #include "usart4.h" #include "usart5.h" #include "usart6.h" #include "Openmv_receive.h" int main(void) { int T=0; int Yaw=0; int Pitch=0; u8 Key_Num=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 uart_init(115200); KEY_Init(); uart2_init(115200); // uart3_init(115200); // uart4_init(115200); // uart5_init(115200); // uart6_init(115200); delay_init(84); while(1){ Key_Num=KEY_Scan(0); if(Key_Num==1){ //USART_SendData(USART2,0x01); // USART_SendData(USART2, ); USART_SendData(USART2,0x01); //USART_SendData(USART1, ); } if(Openmv_read(&T,&Yaw,&Pitch)){ printf("%d %d %d ",T,Yaw,Pitch); } } }
#include "Openmv_receive.h" u16 RxBuffer[6]; u8 RxCounter1 = 0; void Openmv_Receive_Data(u16 data) { static u8 state = 0; if(state==0&&data==0x55){ state=1; RxBuffer[RxCounter1++]=data; }else if(state==1&&data==0x55){ state=2; RxBuffer[RxCounter1++]=data; }else if(state==2){ RxBuffer[RxCounter1++]=data; if(RxCounter1 >5||data==0xff)state=3; }if(state==3){ if(RxBuffer[RxCounter1-1]==0xff){ state = 0; RxFlag = 1; RxCounter1 = 0; //USART_ITConfig(USART1,USART_IT_RXNE,DISABLE); //完成一次接收,关闭串口 }else{ state = 0; RxCounter1 = 0; //数组溢出,循环存数据 } } } u8 Openmv_read(int *T,int *yaw,int *pitch) { static u8 read_pos = 0; if(RxFlag == 1){ if(RxBuffer[read_pos-1]==0x55&&RxBuffer[read_pos]==0x55){ *T=(int)RxBuffer[++read_pos]; *yaw=(int)RxBuffer[++read_pos]; *pitch=(int)RxBuffer[++read_pos]; RxFlag = 0; read_pos = 0; return 1; }else{ read_pos++; return 0; } } }
#ifndef __OPENMV_RECEIVE__H #define __OPENMV_RECEIVE__H #include "sys.h" #include "stm32f4xx_conf.h" extern u16 RxBuffer[6]; static u8 RxFlag = 0; void Openmv_Receive_Data(u16 data); u8 Openmv_read(int *T,int *yaw,int *pitch); #endif
完整工程: