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

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

[复制链接]
STMCU小助手 发布时间:2021-7-26 11:12
因为arduino控制丝杆和控制拨片的板子都只有1个串口,他们彼此之间需要互相通信,而且还需要和树莓派通信,因此串口数目就不够了,于是我就用STM32F103芯片做了一个串口数据管理器,STM32F103芯片有3个串口,分别是USART1~3,因此我就分了UART1串口和树莓派通信,UART2和驱动拨片的板子通信,UART3和驱动丝杆的板子通信。$ C0 c) k" }3 T
' f2 e% B+ S0 Y  R

* m! R2 ^7 ~, ], x% ?. p0 J4 x任务分析
' T  F, G7 p8 e# q8 @! M 1.png " ~; \! d/ E2 P1 ^% d
串口数据流分配大概如上图所示,黑色的箭头即表示了串口数据流,这都还是好理解的,唯一有些难理解的就是蓝色箭头了。
' [. ~0 ~5 |' `5 G7 w8 {, Y
  _% v) p4 D, a* f4 b' a+ c1 |; n! O

; P# ~! @# v- d2 |蓝色箭头指的是舵机驱动板和丝杆驱动板借由STM32F103芯片实现间接的互相通信。8 e+ {0 P. K6 d! Z- y9 R7 B

9 o2 k  E: O4 d) k& ?; D/ f

# x8 x: g$ Z( w4 m6 m) L0 c5 k/ \STM32F103在其中扮演着相当重要的命令,由其解析树莓派下发的命令,并且将任务准确分配到舵机驱动板和丝杆驱动板,并且其还解析丝杆驱动板和舵机驱动板上发的命令,保证2块驱动板之间也能实现通信。这样才能最终保证整个串口数据流的稳定。, ?( j9 p& d! F0 O/ @/ q

- W  e4 ^! B8 k
5 F) w* l7 M' q3 Z3 A& ^. W
4 r7 O7 q8 h! I7 G. s: z

% b. ~- s5 @) z, FSTM32CubeMX配置工程
# T0 [0 B/ ~1 p8 C1 {8 Z9 o) |7 `7 _( H" r; S3 |) B
* A( T  o( c: Z& r) T  v& k
首先在STM32CubeMX里面选择我们的芯片(STM32F103C8Tx)
3 k% s9 o4 ]+ z5 z  h. ?! H 2.png
# \1 K" |+ z* r, G首先我们来配置SYS为Serial Wire,并把基准时钟配置为SysTick
  Z; r  h, e% Y! h% t, A0 N 3.png
- Q% X3 B' m4 f  b( B; m5 L6 v# E接下来配置RCC
) c( Z+ O* t% v0 F# \ 4.png
' X+ x5 m# P. `: W! f. U) N% C完成了芯片基本配置之后就开始配置串口了,因为舵机驱动板和丝杆驱动板的串口波特率都是9600,因此USART2和USART3的波特率都配置成了9600,那么为了保证一致,我也就将STM32F103与树莓派通信的波特率也配置成了9600,具体配置如下。. p4 u8 F7 U: G; w. B+ n
5.png
& l6 K) [  a- P: V5 a& g% a( [* e. [1 W% q
' j4 C9 M8 ^( s4 C0 _, |- m
6.png
5 d) U  y/ P' a" _. f9 _/ d
2 Q# v1 V1 g0 ]0 K$ x
* [4 h/ h+ L4 K& {+ M2 W/ G/ ^' j
7.png
8 ^$ @2 n. j: r* b完成了串口配置之后可以看到芯片的引脚使用图如下所示,
  r3 {5 u) W0 I3 z2 `! \6 j! R: d
4 s( l; P; y4 k! D0 h" p2 k
- V3 i. Y1 p9 Q- s, M% _
8.png
$ x9 c# b4 [: G% y2 M& I那么至此我们以及完成了芯片的配置,接下来就要生成工程了,我用的开发环境是Keil5,因此我选择的IDE是MDK-ARM V5。. L; D) ]# ]0 m; D8 d
9.png 7 v; [' n5 e( N3 Q: ?% q- ?. R- M
还有下图2个选项默认是不会勾选的,但是为了减小生成的Keil5工程文件的大小,我建议都勾选上,第一个是只包含必要的库,第二个是将外设文件都按照.c和.h进行分类。
) g7 ]; u( e" o" L 10.png : h6 u, s) e2 V. [
完成工程配置之后,点下图这个文件就可以生成工程啦。$ I4 A3 z) \3 g: l* H# {" M
11.png : H! v6 q# @  C1 d/ K
然后就可以编译生成的工程文件了,如果出现了下图错误,请参照文章[url=*https://www.guyuehome.com/29307]《CubeMX配置STM32F103C8T6芯片调试光电传感器》[/url]7 W  p4 `+ M# U/ R5 r
12.png
" X0 p$ @6 v/ Y, Y: _, P0 E& R: G- C; k# p
* U3 B8 G+ U& d

! X, `0 u7 n9 b' d; M4 z' O

! ^, W- _" t. n4 I% ~逻辑撰写( N3 ^3 @8 q; k0 p" t# @9 [
首先我们将各个串口重命名一下,减少程序的耦合性2 H, v) Y% H9 e* o3 U
  1. <font face="微软雅黑" size="3">#define PI_SERIAL huart1" Q+ K# @- j2 j: k, T! f5 r2 A- o
  2. #define SCREW_SERIAL huart2
    ! m! k! b/ t, h8 N" ^% h
  3. #define SERVO_SERIAL huart3</font>
复制代码
接下来就是在程序的主循环里进行的操作了3 f& t! l( ^4 F( q
  1. <font face="微软雅黑" size="3">
    ; U; N, P! @) t4 O/ z+ B' c8 |
  2. char pi_serial[7] = {'\0'};
    4 v2 B: @. ]! k9 t
  3. char servo_serial[4] = {'\0'};
    " W+ A8 ?" X* r+ |) l' D7 ]+ L
  4. char screw_serial[3] = {'\0'};0 h6 f. ]/ Y  c, a1 Q
  5. while (1)5 V- z8 F& |/ u* h1 _
  6. {
    , P1 @6 ?1 X* h& G- \
  7.     if(!HAL_UART_Receive(&PI_SERIAL,(uint8_t *)pi_serial,6,0XFFFF)){//接收到树莓派的消息
      y" \& I& o) E
  8.         //解析树莓派的命令
      v* X; q3 H# E& ?

  9. ; r, z8 Y+ ]2 q$ i' G9 Y9 I5 I
  10.     }( G/ P8 S, F& E+ G  c
  11. }</font>
复制代码

6 x5 ~- R; s1 M1 z! V8 b% t4 N) d% v  }& {
赞 收藏 评论0 发布时间:2021-7-26 11:12

举报

0个回答

所属标签

相似技术帖

官网相关资源

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