STMCU小助手
发布时间:2022-5-15 16:41
|
实验操作7 ^# S; l0 N Z! g9 L( ~! ^# x 1、打开cubemax ,芯片选取。3 p& r" x1 Z. r8 V 选取STM32F103RCt6 (根据实际情况选择),LQFP64封装的。然后鼠标双击中间那个圈住的地方就可以进入配置界面。4 j/ a. G. N/ J
_/ _5 V0 E& W4 \# I
图2、配置界面 如上图:% U( e2 ? J( D. _* ^ \. [0 g" ]" G (1)、标号1 为系统核心的配置,其中由晶振的配置。7 }6 }8 ?3 R3 x. Y/ u, B (2)、标号2为模拟量相关的外设配置,如adc,dac,等。6 L0 [2 y3 E# Z3 `8 p. J $ D: |! D; t$ D# }* i7 a, W (3)、标号3为定时器配置。7 \: g& k) ?4 @7 I (4)、标号4为通信相关的外设。比如串口,CAN等。 * e% N1 `* B+ j; f$ U/ x+ D/ ] 其他图中有标注。 2、晶振配置" s- g/ |" C0 h2 ]( @ 晶振是单片机的时钟来源,相当于心脏,先添加晶振,点击上图编号1,然后出现下图,在点击RCC,进入晶振 G* d- `* M" {+ s
) H! a6 {( r" E O: ~ 如上图:HSE 和LSE 都选择Crystal..选项。然后注意芯片示意图上有四个引脚变为绿色。 3、时钟树配置 m, a/ D& g; H. n* F' x 点击
+ R( G! e2 ~0 E5 l7 E* P! r
配置时钟树如上图,改好后按回车键生效。 3 p" [0 ^3 C- B: {1 _/ G6 D 4、中断管理配置: 8 e) h; H9 p7 c' m. L6 o
7 }, ~! ~& l( e$ x1 Y 点击NVIC 后,进入如下界面:
' f& l: L2 Z2 o' O 到这里我们STM32的系统基础配置就完成了!$ X8 Q R* `1 F1 D$ ^, u7 T % Q* ~2 z0 B2 V, B 5、外设配置 8 e. W) P6 @0 g$ V. n3 M 下面就是结合具体需求来进行配置,例如我们这里讲的是串口1以及串口1的接收中断配置,那么下面开始配置串口1 及其中断。+ W& C. L# h/ |8 W( H5 r# r
这里只要选好模式就行,可以注意到,芯片示意图上已经出现了串口1引脚 。但要记住这里的波特率设置为115200了。这里串口就可以正常使用了。但是,我们还需要使用中断,所以还需要配置串口中断。
' \. Y" i$ e, Q* P1 _. X# G 中断最后还需要设置好优先级: 3 W$ G+ {, |7 |1 Z
" U& U6 } e6 r 到这里,串口1的中断就算是配置好了。接下来可以生成代码了,但是需要几个小的配置,点击工程管理
进入管理工程界面,: r0 b6 c# m3 R% H3 [/ k( g. _% @$ c
到这里软件的工程的软件配置部分就结束了,然后生成工程代码,
2 b9 p" U$ |" Y! X- y) I+ | 6、工程代码上的配置以及修改 0 R( V1 V+ ?$ W6 e* W; C 使用keil5 打开刚刚生成的工程代码。
# X9 j4 ?( v: H. c& Y+ R9 S
找到main.c, 会发现如上图的主函数结构,其中5 d: f# Q- v8 z+ Q MX_USART1_UART_Init(); 就是软件生成的串口1初始化配置。 ( s1 Q8 U; D& [7 O) | 如下图,光标放在相应的函数上,鼠标右击,选择GO TO Definetion.. 选项即可进行跳转。 * K5 f) {5 h Y$ F
跳转进入usart.c 文件,会看到,MX_USART1_UART_Init();的函数体。2 ?* N" F5 W/ {+ {9 R4 K* ?/ B % B7 Q, T, x/ R: g
; w* C+ Q8 l- b( g) T" N ? 在这个usart.c文件中添加如下代码:,如下图所示. E3 P5 b+ ` D" g$ U m* n9 A- z" |$ G8 q- j 这段代码可以在STM32中正常使用printf()函数。具体添加位置可以如下图,注意所在的文件和位置。同时不要忘了在usart.h 文件中添加#include “stdio.h” % e7 i7 W$ G% N+ I7 Q4 m% j# r1 ?
添加 #include “stdio.h”3 L/ f$ {- p1 r& Y
9 |$ o3 u! u. l & A1 x! _% A5 l. O 经过上述两步就可以正常使用printf() 函数了。 Y, Y2 M5 D/ m+ r& _ : d# ^! g0 W- |% ?4 \ 最后配置中断相关的函数, (1)、找到中断服务函数- B5 O, ^, H3 s1 }; \4 y 0 e" m- A( T7 e# T. o" z, l4 g 位于stm32f1xx_it.c 文件中 9 {% O0 S7 g5 k& S1 S, ]
F5 ` W, x" e. M' Q( H" k$ @ (2)、找到中断回调函数; \/ j% G, R) a 1)、HAL_UART_IRQHandler(&huart1); ! m" s$ k" `; e" y: g, [8 D: Z5 f5 E 2)、UART_Receive_IT(huart);1 w/ Z6 {0 P+ b9 f" t 3)、HAL_UART_RxCpltCallback(huart); - o3 x P2 x2 h4 w$ [% J- L: t void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart): c+ ]- K! b# r- F 从1)可以跳转到3), void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); 就是串口中断回调函数 。9 D( B3 _0 D- e- H/ O: ] 并且将void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)复制到usart.c文件中,如下图。在这个函数中就可以写中断逻辑
( }6 B5 d; p0 M. p T+ Q * v- q' o; p- X% w" {' x6 ^ (3)、开启接收中断 HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)! n6 a* b& B+ L) z0 I+ m # G, ?) q! S/ | ~ 在这个函数中会使能接收中断,需要三个参数,分别为 0 ~) _( K' ]& h l- K 1)、串口句柄,4 i; a& }, g2 p( H, A+ a' d : J I0 @6 W9 q7 P/ H+ X- }- c* L 2)、保存接收数据的数组, * g2 b3 E% M1 O# E; l 3)、每次接受的数据字节数,9 @) Z8 `! [0 }7 c8 N) R 2 r- A- I1 |& x 所以我们需要首先定义一个保存接收数据的数组。 . J ?6 x6 P' `
2 v3 h0 r: A3 u2 y 然后开启中断,需要写在两个地方,分别是串口初始化的时候和回调函数的最后,如下图所示,- ?' E" W: {# Q7 V. ^, R0 X7 F$ Y 0 P0 n6 t6 a( b
最后 在回调函数里加入如下代码进行测试:+ ^+ |5 ~: m( M0 ^0 l . e$ k9 q0 v' a5 i6 o4 R2 Y
最后下载程序测试,6 H3 g! C% |/ Y2 u2 \: U% b' k5 ] 点击发送,单片机收到数据,就会打印出123.(因为我们使用的是串口1的接收中断,所以通过串口助手给串口一发数据,串口1接收到数据,就会触发接收中断,执行中断服务函数,最终执行到回调函数也就是我们的中断逻辑。这里的回调函数只是为了说明问题,实际使用时还需要判断是哪个串口触发的中断。- f4 w" A1 a9 T4 W8 Q) T # F' Y# _0 S5 j$ F2 o5 K5 n ! y. I0 [1 l, T F3 k |
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
OpenSTLinux 6.1发布:M33-TD加持+安全升级,STM32MPU开发效率翻倍!
微信公众号
手机版