关于烈火四轴遥控器串口上传分析
2016-06-17 09:34
309 查看
已发送遥控器供电电压为例 函数Print_BSP_VOLTAGE中data前5位为帧头,最后一位校验。
XOR校验函数,可参考:http://linux.programdevelop.com/1233350/ 以及 http://heyunhuan513.blog.163.com/blog/static/160204220073268595690/
数据发送函数
准备工作已完成,进入发送中断
void Print_BSP_VOLTAGE(void) { uint8_tdata[13]; uint8_t count; data[0] = '$'; data[1] = 'M'; data[2] = '>';// data[3] = 7; //校验用数据长度 data[4] = MSP_ANALOG; data[5] = (uint8_t)(Battery_Fly/10.0f)& 0xFF; data[6] = 0; data[7] = 0; data[8] = 0; data[9] = 0; data[10] = 0; data[11] = 0; data[12] = Get_Checksum(data); for(count=0;count<13;count++) { PrintHexU8(data[count]); } }
XOR校验函数,可参考:http://linux.programdevelop.com/1233350/ 以及 http://heyunhuan513.blog.163.com/blog/static/160204220073268595690/
uint8_t Get_Checksum(uint8_t mydata[]) { uint8_t i; uint8_t checksum=0; uint8_t length = mydata[3]; for(i=0;i
数据发送函数
void PrintHexU8(uint8_t data) { TxBuff[Count++] = data; if(!(USART1->CR1 & USART_CR1_TXEIE)) //判断发送中断由上次发送结束后关闭 USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //重新打开发送中断,在USART发送中断里写入发送数据 }
准备工作已完成,进入发送中断
void USART1_IRQHandler(void) { if(USART1->SR & USART_SR_TC && (USART1->CR1 & USART_CR1_TXEIE) )//为使SR_TC置位,已保证第一个字节能发 送,在串口初始化后添加USART_ClearFlag(USART1, USART_FLAG_TC); { USART1->DR = TxBuff[TxCount++];//写入DR发送缓存,自动清除SR_TC中断标志 if(TxCount == Count) { USART1->CR1 &= ~USART_CR1_TXEIE;//发送完成后关闭发送中断 } } }
相关文章推荐
- STM32Fxx系列CAN总线配置总结
- atmel studio遇到的USART问题,解决了,但是不知道问题所在
- STM32F429 Discovery 开发板USART乱码问题,解决过程
- stm32的USART的初级使用
- STM32F207串口奇偶校验收发不正常
- 环形队列,动态内存
- uCOSII学习笔记,不断更新
- DB9串口定义及含义
- C语言代码跟踪调试
- STM32之Printf函数重定向
- STM32的USART
- STM32学习第三天----有个USART的发送数据的问题没有解决
- 假期备战蓝桥杯stm32学习笔记(二)
- STM32 USART串口DMA接收和发送模式
- STM32F4——串口(USART)通信总结
- STM32F103命名规则
- STM32软件仿真问题
- stm32(寄存器)超声波程序
- PIC单片机之EUSART串行通信接口
- STM32的USART