你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32CubeMX配置STM32F103C8Tx芯片制作串口数据管理器

[复制链接]
STMCU小助手 发布时间:2021-7-26 11:12
因为arduino控制丝杆和控制拨片的板子都只有1个串口,他们彼此之间需要互相通信,而且还需要和树莓派通信,因此串口数目就不够了,于是我就用STM32F103芯片做了一个串口数据管理器,STM32F103芯片有3个串口,分别是USART1~3,因此我就分了UART1串口和树莓派通信,UART2和驱动拨片的板子通信,UART3和驱动丝杆的板子通信。0 `5 o, A9 W+ K' d' Y
; {* I8 f/ e4 e5 c& q) y

( ^; i8 n% Y/ _; V3 _5 \8 W: v  k( F任务分析
4 {" q  Y0 f+ e' ` 1.png
# A8 n+ n$ t; I6 E8 Z. D串口数据流分配大概如上图所示,黑色的箭头即表示了串口数据流,这都还是好理解的,唯一有些难理解的就是蓝色箭头了。
+ b9 `% H7 z* U+ n! I" M* F9 p
: H2 s! U) v8 `
0 B) G; `! y; M$ H/ A4 A+ A
蓝色箭头指的是舵机驱动板和丝杆驱动板借由STM32F103芯片实现间接的互相通信。  j) C1 o, s% i) I6 T
3 r) d# {+ z& v/ r8 P/ c$ q& m/ S

# ]6 e7 |4 _' x- qSTM32F103在其中扮演着相当重要的命令,由其解析树莓派下发的命令,并且将任务准确分配到舵机驱动板和丝杆驱动板,并且其还解析丝杆驱动板和舵机驱动板上发的命令,保证2块驱动板之间也能实现通信。这样才能最终保证整个串口数据流的稳定。
9 W$ \5 k) X" N5 K/ M) J- r( m1 f/ W6 x+ J
4 Y% v9 E5 w5 d7 [- p6 }

! D/ Z; V  j8 \( A
* H$ l" {& ^+ |' h% A% y
STM32CubeMX配置工程
7 ^( P/ I, A% Z* F* n8 Z' D& b' F) x

% B# F$ e  q0 e+ Y首先在STM32CubeMX里面选择我们的芯片(STM32F103C8Tx)
* T5 ^, u' ]' J- N; ] 2.png
+ }3 c5 n3 W% e7 B& u首先我们来配置SYS为Serial Wire,并把基准时钟配置为SysTick( F1 u" @( d: H, r* c2 l
3.png . R, m+ s6 `9 _8 W
接下来配置RCC
) U  I) c2 z1 J5 {* \3 X8 H 4.png
; s7 O  }; l  H. M( b4 K/ V: X  N完成了芯片基本配置之后就开始配置串口了,因为舵机驱动板和丝杆驱动板的串口波特率都是9600,因此USART2和USART3的波特率都配置成了9600,那么为了保证一致,我也就将STM32F103与树莓派通信的波特率也配置成了9600,具体配置如下。
9 a5 A# t- [0 n$ c  Z 5.png
  L- r/ K0 ]7 n  |4 P" G" P0 q* O: [& o2 W

; ?/ Z4 D$ R6 L; E* V 6.png 7 D; e3 j6 m9 G* ?; w

# U. v- U7 j) ?5 r! D& K7 X. D

& g8 B( A6 d. X5 ^* L 7.png
( t: F) {; R, x! p1 g! {完成了串口配置之后可以看到芯片的引脚使用图如下所示,/ _  x& y! j$ s+ d6 L
. i0 x6 P0 B7 }9 Y, @7 N

# u4 s7 C: M: \1 ~/ e" Z% x& B 8.png / C( V, |$ L& y& C
那么至此我们以及完成了芯片的配置,接下来就要生成工程了,我用的开发环境是Keil5,因此我选择的IDE是MDK-ARM V5。7 C  |' m) v  G/ t, o" {1 y
9.png . U) k3 H8 H% f$ Q- b
还有下图2个选项默认是不会勾选的,但是为了减小生成的Keil5工程文件的大小,我建议都勾选上,第一个是只包含必要的库,第二个是将外设文件都按照.c和.h进行分类。
( P  |0 O3 L4 _. A" q+ S0 {1 W 10.png
2 F% b( I9 [8 b; l+ p: \完成工程配置之后,点下图这个文件就可以生成工程啦。' ]; n! u7 f8 ^& ~1 g0 t7 o0 P: j
11.png
/ ^( @( g6 r, E8 Z5 P然后就可以编译生成的工程文件了,如果出现了下图错误,请参照文章[url=*https://www.guyuehome.com/29307]《CubeMX配置STM32F103C8T6芯片调试光电传感器》[/url]
+ k9 f) ]% Z3 l$ ^% Y5 @ 12.png
" X, @1 I0 l& u" R' J" z" \- ^+ M) ^8 U
/ r- F, O( o; I; D  S
; J6 m& \- R" g5 g( L" |2 c! u) {
, F  ?  {( d$ b  e( D9 l1 |& d4 X
逻辑撰写
( \% o0 n6 \/ H* l; E0 z2 d; t+ m首先我们将各个串口重命名一下,减少程序的耦合性3 z+ `% m! B! J. X
  1. <font face="微软雅黑" size="3">#define PI_SERIAL huart14 m4 Q0 U3 J( a! c% R
  2. #define SCREW_SERIAL huart2
    ! z5 Q  m) T# \: e0 Z$ u
  3. #define SERVO_SERIAL huart3</font>
复制代码
接下来就是在程序的主循环里进行的操作了
! B* ~; y- [1 z0 V5 L! o
  1. <font face="微软雅黑" size="3">4 I$ n, U" z: M. I3 X: y% [' |
  2. char pi_serial[7] = {'\0'};7 R* I" u  Y0 T( K
  3. char servo_serial[4] = {'\0'};, h6 t- F6 t+ B( J% Q) b
  4. char screw_serial[3] = {'\0'};4 h% U. r. i+ w
  5. while (1)) b$ n5 U0 F0 Y; m: V
  6. {
    , ~: ~+ m# M( U
  7.     if(!HAL_UART_Receive(&PI_SERIAL,(uint8_t *)pi_serial,6,0XFFFF)){//接收到树莓派的消息
    , b9 h2 I7 k, W# n
  8.         //解析树莓派的命令2 j4 l& M* I0 {$ s0 x' Q
  9. % W8 r  X" n+ Q- g
  10.     }
    + v3 b" p7 Z. ], l1 |
  11. }</font>
复制代码

0 I4 Z* n, d2 V% T+ r' @* A
+ S0 ^7 B$ Z( Q. h5 _9 n* J
赞 收藏 评论0 发布时间:2021-7-26 11:12

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版