完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近打算利用stm32f103做串口发送或者接收数据。
1、接收数据主要是接收外部单片机的命令,比如外部单片机发送一个停止命令,那么电机停止,发送开始命令,电机开启,发送清0的命令,相应的变量清零。 2、发送的数据,主要是stm32的正交编码功能进行电机的测速和脉冲测量,然后通过发送数据的形式发送给没有这个功能的单片机。比如51单片机。 接收和发送都需要制定一定的指令格式,并包括简单的校验和,进行数据的校核校验。 接收的格式目前自定义为 三个指令, 0x7c+0x11+校验和,作用为A 0x7c+0x22+校验和,作用为B 0x7c+0x33+校验和,作用为C。 其他后续如果有其他的命令,可以进行扩充。 这个是自定义格式,后续研究下数据格式的指定,保证更加可靠。 目前主要是用了三个手段来保证数据的接收校验。第一个手段,加帧头0x7c,第二个手段用一个字节0x11作为命令A的具体命令,00010001,两个1间隔较远,假如有错发或者漏发的话,不会影响误判,校验和主要是0x7c+0x11的十进制和,除以256,取模作为校验和,比如0x7c+0x11=0x8d=141,校验和为141,0x7c+0x22=0x9E=158,校验和为158,0x7c+0x33=0xAF=175。 当三者都检测到正确的时候,接收数据成功,进行相关功能控制。 由于stm32的串口接收功能,主要是控制内部的测速测距的。因此要起到控制的作用,必须优先级为最高。 当然也可以用外部中断进行外部触发,然后起到这个作用,比如用单片机的某个口电平变化,触发外部中断引脚,起到上面的三个指令ABC功能。但是这个会增加外部单片机的负担。因此还是用32的串口接受命令吧。这样外部的单片机,就仅仅需要一个串口,就能起到和这个stm32进行通信了。 上面是正点原子的库函数开发手册的串口实验的相关介绍。感谢正点原子的教程,写得不错,深入浅出。 现在是需要利用串口做接收数据的中断,那么需用利用图中的函数。 回到中断优先等级的设置问题。如何设置串口的接收中断优先级是最高呢?规划一下自己的代码的使用到中断的其他内外需求。做个优先级规划排序。 主要用到 1、串口的接收中断起到控制内部目的; 2、定时器1:定时10ms进入一次定时程序,每隔20ms时间测量脉冲数,计算相对脉冲量,运动方向,电机转速;到0.2s=200ms的时候,停止定时器3和定时器4测速,通过滤波和其他手段计算脉冲量和速度,转速等,另外计算结果乘以100倍之后,拆为高字节和低字节,再发送,避免不同单片机编译系统关于浮点数的大端和小端知识,通过串口发送计算结果,再开启TIM3和TIM4。外部单片机接收到数据的时候,再合并数据,然后除以100,做浮点数的强制类型转换,得到实际的数值。 3、定时器3:用到正交编码功能,对电机1测脉冲;中断时候,溢出次数+1, 4、定时器4、用到正交编码功能,对电机2测脉冲;中断的时候,溢出次数+1. 目前主要用到上面四个中断。 中断优先级顺序: 串口中断>定时器1>(定时器3=定时器4) |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1760 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1058 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1932浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
723浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
564浏览 3评论
590浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
548浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 13:05 , Processed in 0.699947 second(s), Total 50, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号