已发送遥控器供电电压为例 函数Print_BSP_VOLTAGE中data前5位为帧头,最后一位校验。
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;//发送完成后关闭发送中断
}
}
}
上一篇:STM32 HAL库 串口DMA发送完成中断
下一篇:STM32使用HAL库驱动USART详解及例程
推荐阅读最新更新时间:2024-11-13 10:51
设计资源 培训 开发板 精华推荐
- 使用 Richtek Technology Corporation 的 RT8241D 的参考设计
- 基于FE1.1S四路USB集线器设计
- LTM8057EY 8V 反激式转换器的典型应用电路
- I/O 扩展器MCP23S08T-E/SS 芯片的验证板
- 使用 Analog Devices 的 LT6110ITS8#PBF 的参考设计
- BD48xxx系列BD48L23电压检测IC的典型应用
- LT1172CS8、5V/1.25A 正电流升压降压转换器的典型应用
- 使用 NXP Semiconductors 的 MC33907AE 的参考设计
- LTM4650EY-1A 2 相、1V @ 50A 设计的典型应用电路
- ZTL432 大电流并联稳压器的典型应用
- 6月19日上午10:00直播:大大通助你解锁新一代ADAS技术
- 英飞凌角度传感器应用解锁机看看你能找到几种?
- #Micropython大作战#第二弹:发表mciropython原创教程赢好礼!
- 【EEWORLD第十七届社区明星人物】伙拼七月明星人物胜出!
- 安森美半导体工业物联网解决方案下载有惊喜!
- 4月25日上午10:00-11:30 ADI与您相约 TOF (Time Of Flight) 技术介绍及产品应用 有奖直播
- 感恩十载 与你同在 EEWORLD十周年
- 【ST直播】MEMS传感器开发套件简介、了解内嵌“有限状态机和机器学习内核”的传感器
- 了解PI高性能AC-DC产品,答题赢好礼
- ADI & WT ·世健 MCU 痛点问题探索季 ——第一站:征集 | 使用 MCU ,哪些问题最令你头大?