请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2021-7-26 11:12
因为arduino控制丝杆和控制拨片的板子都只有1个串口,他们彼此之间需要互相通信,而且还需要和树莓派通信,因此串口数目就不够了,于是我就用STM32F103芯片做了一个串口数据管理器,STM32F103芯片有3个串口,分别是USART1~3,因此我就分了UART1串口和树莓派通信,UART2和驱动拨片的板子通信,UART3和驱动丝杆的板子通信。  t2 D  n& U+ d, M+ ^! W1 {

1 }6 i: X- }- S8 c

# r1 x5 Q! o# B1 S6 u( d任务分析
: C6 O2 B, F4 F/ v, m 1.png ) Z  a! ^6 \8 e( d' z- |
串口数据流分配大概如上图所示,黑色的箭头即表示了串口数据流,这都还是好理解的,唯一有些难理解的就是蓝色箭头了。
( C; m9 w) N/ c5 s' E7 o2 V0 F* B& ^- d: k
: m3 Q0 Z" |: H
蓝色箭头指的是舵机驱动板和丝杆驱动板借由STM32F103芯片实现间接的互相通信。
; ^5 g6 I4 T1 m% a( x" _- v! N5 H- }7 X, g$ y
1 j  U/ X7 ~( Y! [. }3 w( W9 b2 p
STM32F103在其中扮演着相当重要的命令,由其解析树莓派下发的命令,并且将任务准确分配到舵机驱动板和丝杆驱动板,并且其还解析丝杆驱动板和舵机驱动板上发的命令,保证2块驱动板之间也能实现通信。这样才能最终保证整个串口数据流的稳定。
1 t* `5 s. t+ u( Q* E. p4 ?7 M3 I  F/ R) e

+ q: G- @1 V6 g0 S" Z) k; P" I4 ^' {& U6 C% v
( W$ R. v, c$ R
STM32CubeMX配置工程# U& d8 ^5 _. @; \8 b* H& [

  Q% ~2 v; j( k# W# T0 l

$ f4 e8 I4 s: e6 [1 C* f# L& P5 r首先在STM32CubeMX里面选择我们的芯片(STM32F103C8Tx)
# r( _: x. Y0 } 2.png ) o! _$ ~5 ?9 [/ f
首先我们来配置SYS为Serial Wire,并把基准时钟配置为SysTick
, q- c: M: {) W 3.png $ [  Q0 m5 _* |
接下来配置RCC
" R1 [# j$ X: @2 |2 n& W5 P5 n 4.png 2 Y) H  y/ W; b  c8 S3 y* C0 W2 M& _
完成了芯片基本配置之后就开始配置串口了,因为舵机驱动板和丝杆驱动板的串口波特率都是9600,因此USART2和USART3的波特率都配置成了9600,那么为了保证一致,我也就将STM32F103与树莓派通信的波特率也配置成了9600,具体配置如下。3 b2 P: _4 m+ ~" E3 c+ r- I" q
5.png
& ^7 g3 e2 Z( B2 b
% G+ _# x1 f4 K2 I9 e. e: Y# i. [

% V: f, `+ {- ^ 6.png
4 ]0 B  h; i0 ?3 B& p. n' k( L9 G! r* A: m
% u6 R3 V6 U# z$ R
7.png # V- _  l8 E8 N# d' d
完成了串口配置之后可以看到芯片的引脚使用图如下所示,
# o$ P. }) {. K9 j9 R6 |8 ^( A- a

& U: y' g# }5 ~/ {; T 8.png
3 j( P" f: P3 M) D% U  b那么至此我们以及完成了芯片的配置,接下来就要生成工程了,我用的开发环境是Keil5,因此我选择的IDE是MDK-ARM V5
$ u" M" O7 f* Y( p6 c 9.png & S; S" {( u) z% _' M, |8 x1 J
还有下图2个选项默认是不会勾选的,但是为了减小生成的Keil5工程文件的大小,我建议都勾选上,第一个是只包含必要的库,第二个是将外设文件都按照.c和.h进行分类。
1 H, S  X/ ]; F; a: g3 U. W$ u 10.png . u: T* l; d- e( C) w2 e4 \
完成工程配置之后,点下图这个文件就可以生成工程啦。) ]) N% K/ x* |, Q# J: R
11.png " _% D/ h: g3 Q) m+ \4 D, }
然后就可以编译生成的工程文件了,如果出现了下图错误,请参照文章[url=*https://www.guyuehome.com/29307]《CubeMX配置STM32F103C8T6芯片调试光电传感器》[/url]" g& @- l* t. p4 G2 j
12.png & P* t; v0 E' L( L3 t1 ?
( e8 O, H% G3 y4 |( Q$ \* n) i
9 a, u0 G; V/ f% ?+ m) R  n

( [% y1 {# v+ [4 D# X; }0 @

7 f2 W# M, ?' `+ b& V6 r8 _' o逻辑撰写
( V# s* t% G" a) `( L: K首先我们将各个串口重命名一下,减少程序的耦合性  b# L0 o5 n9 i5 |  Z, b
  1. <font face="微软雅黑" size="3">#define PI_SERIAL huart1
    9 i/ }( w+ L- Z3 U8 H$ W
  2. #define SCREW_SERIAL huart24 ^: T+ f6 o- V4 d( F. G/ f
  3. #define SERVO_SERIAL huart3</font>
复制代码
接下来就是在程序的主循环里进行的操作了, ~& s7 v. F1 H# V
  1. <font face="微软雅黑" size="3">! _, c4 p% B# J7 k
  2. char pi_serial[7] = {'\0'};& @0 Y9 U1 F2 J' @# q
  3. char servo_serial[4] = {'\0'};
    ' M- c( ^( F2 y
  4. char screw_serial[3] = {'\0'};
      c- @7 S5 M% T2 S3 \, G$ A: q
  5. while (1)
    $ F& R5 I; A% D
  6. {
    3 q+ u. I) C8 x; E8 g5 j" R
  7.     if(!HAL_UART_Receive(&PI_SERIAL,(uint8_t *)pi_serial,6,0XFFFF)){//接收到树莓派的消息' @% |" w- d/ [: U6 w" P
  8.         //解析树莓派的命令/ _7 ~5 K- G3 W# R
  9. 9 S% R5 b8 h8 K1 M- l1 t) m
  10.     }; ?8 |* p# z6 i! U2 C
  11. }</font>
复制代码
& N+ m/ g) f5 a  K  L4 J, x: z

# j7 q2 {# |" N3 z9 \6 z/ s, V- A
收藏 评论0 发布时间:2021-7-26 11:12

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版