因为arduino控制丝杆和控制拨片的板子都只有1个串口,他们彼此之间需要互相通信,而且还需要和树莓派通信,因此串口数目就不够了,于是我就用STM32F103芯片做了一个串口数据管理器,STM32F103芯片有3个串口,分别是USART1~3,因此我就分了UART1串口和树莓派通信,UART2和驱动拨片的板子通信,UART3和驱动丝杆的板子通信。 t2 D n& U+ d, M+ ^! W1 { 任务分析 串口数据流分配大概如上图所示,黑色的箭头即表示了串口数据流,这都还是好理解的,唯一有些难理解的就是蓝色箭头了。 ' E7 o2 V0 F* B& ^- d: k : m3 Q0 Z" |: H 蓝色箭头指的是舵机驱动板和丝杆驱动板借由STM32F103芯片实现间接的互相通信。 " _- v! N5 H- }7 X, g$ y 1 j U/ X7 ~( Y! [. }3 w( W9 b2 p STM32F103在其中扮演着相当重要的命令,由其解析树莓派下发的命令,并且将任务准确分配到舵机驱动板和丝杆驱动板,并且其还解析丝杆驱动板和舵机驱动板上发的命令,保证2块驱动板之间也能实现通信。这样才能最终保证整个串口数据流的稳定。 * E. p4 ?7 M3 I F/ R) e " I4 ^' {& U6 C% v ( W$ R. v, c$ R STM32CubeMX配置工程# U& d8 ^5 _. @; \8 b* H& [ 首先在STM32CubeMX里面选择我们的芯片(STM32F103C8Tx) 首先我们来配置SYS为Serial Wire,并把基准时钟配置为SysTick 接下来配置RCC 完成了芯片基本配置之后就开始配置串口了,因为舵机驱动板和丝杆驱动板的串口波特率都是9600,因此USART2和USART3的波特率都配置成了9600,那么为了保证一致,我也就将STM32F103与树莓派通信的波特率也配置成了9600,具体配置如下。3 b2 P: _4 m+ ~" E3 c+ r- I" q ' k( L9 G! r* A: m % u6 R3 V6 U# z$ R 完成了串口配置之后可以看到芯片的引脚使用图如下所示, 9 R6 |8 ^( A- a 那么至此我们以及完成了芯片的配置,接下来就要生成工程了,我用的开发环境是Keil5,因此我选择的IDE是MDK-ARM V5。 还有下图2个选项默认是不会勾选的,但是为了减小生成的Keil5工程文件的大小,我建议都勾选上,第一个是只包含必要的库,第二个是将外设文件都按照.c和.h进行分类。 完成工程配置之后,点下图这个文件就可以生成工程啦。) ]) N% K/ x* |, Q# J: R 然后就可以编译生成的工程文件了,如果出现了下图错误,请参照文章[url=*https://www.guyuehome.com/29307]《CubeMX配置STM32F103C8T6芯片调试光电传感器》[/url]" g& @- l* t. p4 G2 j ( e8 O, H% G3 y4 |( Q$ \* n) i 9 a, u0 G; V/ f% ?+ m) R n 逻辑撰写 首先我们将各个串口重命名一下,减少程序的耦合性 b# L0 o5 n9 i5 | Z, b
|
[NUCLEO-C031C6评测] 驱动LCD 第二步 初始化屏幕
[NUCLEO-C031C6评测] 驱动LCD第一步
【STM32MP135-DK】裸机开发
STM32MP135F-DK 开箱&开发环境搭建&硬件设计分析
【STM32U599】4.引入RTC与MVP开发
基于STM32CUBEMX驱动TMOS模块STHS34PF80之获取状态数据(5)
基于STM32CUBEMX驱动TMOS模块STHS34PF80之中断获取信号(4)
基于STM32CUBEMX驱动TMOS模块STHS34PF80修改检测阈值(3)
基于STM32CUBEMX驱动TMOS模块之驱动STHS34PF80进行人体检测(2)
基于STM32CUBEMX驱动TMOS模块STHS34PF80之获取ID(1)