完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用外设给单片机发送数据,每次发送75个字节,
测量数据帧: AA 0049 00 61 AD 00 41 8300 00 08 CA 43 04 D5 4E 04 D0 48 04 D2 4D 04 D3 50 04 D6 3F 04 CF 5F 04 C4 5E04 C9 70 04 CE 5C 04 D2 43 04 D1 44 04 D2 46 04 D0 4E 04 D3 51 04 D1 48 04 CF44 04 D4 46 04 D2 52 04 D3 4B 04 CD 2A B7 (一共75*2个数值一个数表示一个字节=8位) AA: 帧头标识。 00 49: 帧长度为0x0049(即73)字节(不包含CRC码) 1字=2字节=16位 00: 地址码。 61: 帧类型。 AD: 命令字。 00 41: 有效数据长度0x0041(65 Bytes)。 83: 转速值,0x83即 131 * 0.05 = 6.55r/s 00 00: 零点偏移量,有符号十六位数,0x0000/100 = 0.0° 08 CA: 本帧起始角度0x08CA(2250),即当前角度是2250/100 + 0.0°(零点偏移量) = 22.5° 43: 距离值1对应的信号强度:67 04 D5: 距离值1是0x04D5(1237),实际距离是1237*0.25= 309.25mm。 ……. 4B: 距离值20对应的信号强度:75 04 CD: 距离值20是0x04CD(1229),实际距离是1229*0.25 = 307.25mm。 2A B7: CRC校验码。 我的串口程序如下: void USART1_IRQHandler(void) //´®¿Ú1ÖжϷþÎñ³ÌÐò { u8 Res,i; if(USART_GetiTStatus(USART1, USART_IT_RXNE) != RESET) //½ÓÊÕÖÐ¶Ï { Res =USART_ReceiveData(USART1); //¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý //BUF[cnt]=Res; USART_SendData(USART1,Res); while( USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET ); } if(cnt==0) { cnt=(BUF[cnt]==0xAA)?cnt++:0;//ÅжÏÖ¡Í·0xAA } else if(cnt==1) { cnt=(BUF[cnt]==0x00)?cnt++:0; } else if(cnt==2) { cnt=(BUF[cnt]==0x49)?cnt++:0; } else if(cnt==3) { cnt=(BUF[cnt]==0x00)?cnt++:0;//ÅжϵØÖ·Âë } else if(cnt==4) { cnt=(BUF[cnt]==0x61)?cnt++:0; } else if(cnt==5) { cnt=(BUF[cnt]==0xAD)?cnt++:0; } else if(cnt>5) { cnt++; BUF[cnt]=Res; while(cnt==75) { cnt=0; } for(i=0;i<75;i++) { Data=BUF[cnt]; USART1->SR; //·ÀÖ¹Ê׸ö×Ö·ûµÄ¶ªÊ§ USART_SendData(USART1,Data); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); } 这样子对吗。。。我串口调试不出来 so bad
|
|
相关推荐
4个回答
|
|
在串口初始的时候,禁止掉接收中断
|
|
|
|
发数据放到中断外面去。
|
|
|
|
建议1:你目前的程序缺少清中断标志位,USART_ClearITPendingBit(USART2, USART_IT_RXNE);
建议2:现在先把你程序里后面的那一堆if判断去掉,先得能把收到的发出来再说 建议3:能把收到的发出来后,不要把处理的程序放在中断里做,中断不要过于复杂,否则影响中断的执行效率,中断里只需要把你收到的数据存储到一个全局数组里,在main loop里用专门的函数处理 建议4:串口数据处理用if的效率太低了,程序运行时需要逐个if判断,真是浪费,建议用switch好不好 |
|
|
|
串口中断最好只负责接收数据,在进入接收中断后应该马上清除中断标志位,设置数据接收完成标志,接收的数据最好放到中断外进行处理。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1020 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
996 浏览 2 评论
2102 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1202 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1621 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 01:20 , Processed in 0.633722 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号