一、开发板平台简介:9 e, ^# F6 d- F6 _' d* ~
1、开发板资源简介
6 N! o3 i; r* g q% F, n9 F5 t2 Q2 _(1)开发板主芯片型号:STM32L431RCT6
- E' H8 N' g6 w3 v" [, a(2)开发板主芯片封装:LQFP-64_10x10x05P
3 p4 ?. ?. R6 z4 X(3)开发板主芯片内核:ARM® Cortex®-M42 H$ c* N* ~( Z& g
(4)开发板主芯片主频:80MHz
5 u, l$ I- W5 d- M: |1 L: V(5)开发板主芯片Flash大小:256KB
/ H8 y: I0 m: K; l$ ](6)开发板主芯片RAM大小:64KB
m" D* x& @3 |5 e9 H8 F, |0 W4 M) f' D! }, X
0 n/ C* z9 A' f' c
8 ?. ^) l# O' f9 D1 H: j$ s
S4 a4 A' t, c
( p2 v* Y6 M6 o ~1 d5 P5 T
* O# X% E- A/ ^, O% F9 {2、LED灯资源
: i+ u5 ?( D" s(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:
+ d O9 S+ X/ _. ~' Y% v3 d1 R$ V+ f6 ^( p- g* p
( c* l6 ?6 q6 g; g4 k8 ~
& E, c9 W9 Z2 ?(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:
! _" A& e1 H# s: U
1 a) t3 U* i) ?3 F
! n( N" N, v6 u; J$ {% w
2 [; D; O$ N: {3、串口printf打印工作原理) a& m+ Y8 I4 \+ u9 H7 f, l
串口全称为串行通讯接口,即数据在通信线上一次传输一位,按先后一定顺序传输。我们通常所说的单片机串口准确来说应该是串行异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),使用TTL电平,串口需要RXD、TXD、GND三根线进行通信。
& M! Q0 i) x: x5 w (1)我们选用的STM32L431RCT6开发板串口1已通过USB转TLL串口芯片CH340G引出,使用时,只需要用公对公USB线连接电脑即可(注意也得需要安装CH340G驱动),后期验证试验也可使用该串口作为debug串口。
. ^; t h% ~, f. s$ [* ]/ _" B/ G% S! p K2 [& G
(2)开发板上的其他串口已通过排针引出,为TTL电平,通信的时候需要注意选择对应的电平模块,如USB转TTL串口模块等。
- X- h% L( m2 Q; O* W; y$ |* v5 I" f7 O7 i" _9 @: E5 C; P% |
TTL转CH340串口,硬件原理图如下所示:
# K, R% ~9 V4 m$ B8 e5 e9 j- c* ^2 p/ `/ f2 g0 \# i
! E0 K4 I% ^" k6 N$ c- P: h+ u
4 S, q* u% l& L- K" H- j0 M/ c3 ^3 s. W
二、串口Transmit打印实验过程- }/ T& _, |8 A" [
1、新建STM32CubeMX基础工程
1 Z: O% E! h" E! H( H9 p+ h' \! k(1)打开STM32CubeMX,点击“File”-->"New Project"
9 \' p2 i N" b; g1 F: ~
" I9 }% @: \$ F
* x* C* ~! D' ?0 I" E8 y
0 {+ A/ d6 m9 v8 ?5 J& B* h& U; g0 Y(2)等待打开主芯片选项界面(大约1分钟时间)。
* w. K4 A; e* _: w+ K( y, ]' s: ^% Z3 t9 H' T& K0 x/ P
2 Y0 s3 X9 E1 w8 z4 _7 J7 @" ?
$ g; h. T/ ~6 t; |( ?9 Y
(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。) R% o- i; Y* \- t- \" a# b
r- U* L' l, k* u4 ` F
1 C" J0 o. d( D/ i' H& E; b( k) E, b; e3 m2 F
(4)选择时钟源。
6 T$ y0 i( M# g- U9 `; ?5 K! z, A1 y! |8 ?( u2 c1 R$ a
因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。! g( g$ e2 {9 \2 @
; t$ z2 G- ]$ R- L* j# W- F2 x
. _% E M9 T* e
5 G' D( R4 A7 T' S3 c8 ~' U 因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。3 l, U7 f l: s7 L$ J
, X# [4 h8 S- @6 i1 C0 ?
% K# R4 [$ r- J
8 z# x( E3 {: `2 s/ |1 m( u2、配置GPIO控制LED
1 T& l- S; X4 ~(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为: t* E+ r! ~$ y i5 f2 C
' h0 C- u1 X* _# v: D. `
LED1——PC0
) [$ O7 V8 A* H5 L- g1 WLED2——PC1* j8 F; i9 B# w9 n# M' ?6 u" x/ ?
LED3——PC26 z. f" K) W4 S8 N8 j* p, Z
LED4——PC3
2 T3 E" A* P* k" x: z6 S
% @4 \ \6 K3 v; J" A; L(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。8 B$ X1 R) H( A6 o
3 k- Q' i2 W! H" z
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。6 i. ]2 f; y5 p7 w
鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。, T0 r; T5 U' Q6 h
鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。
: U: \1 m5 g! k+ L- h w鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。/ m' q5 U- l' s+ a9 X7 c. [- g# `, F
3 [% @- N) _3 T ]( G2 k9 W" u9 r
8 K8 |# `+ m r' z, E. p% V
5 Z# {& m; u# |. K- ~6 t7 w8 p
) E1 [3 _* q6 w5 k {- \* I8 O
# R( O# F6 z) T% ~(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。
}) ?+ r+ @' r: e" D1 G3 K: N, w) o4 }9 V
2 @4 k8 k' x) e0 A
, y$ h3 ~% e& o
3、配置PA9、PA10为串口
) L+ o9 }, S! n4 y. V查原理图得知,串口1使用STM32L431RCT6引脚为PA9-USART1_TX,PA10-USART1_RX,引脚设置如下:( o5 E% F8 I2 b( D! n
" A+ ^ B$ E1 B; M5 ^
6 \ B. \2 }5 t/ z7 e( r( P% C# N
8 I& ~- ~5 f8 E7 ^ (1)序号1用来设置串口收发引脚的选择。
4 N& C) S& x& @& d0 L: _& C(2)序号2-3-4-5-6设置串口参数,如波特率115200、8位、NONE无奇偶校验等。
/ i3 p v6 ~( w0 ]: ?! F* j3 ]5 T. k
3、配置项目工程参数
6 ~( l# T' ~) \ E" v/ m(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。- x# |, E' H4 C5 ]$ q
) t$ ~1 h9 L9 M( d7 g
5 k0 g7 o5 v% L0 H
) i# h; f! w# E0 X* H1 Y7 o
(2)完成配置工程。
+ s1 J; s7 C9 {7 L7 T5 f( n: d# N备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)# @! k- B. k9 r. A! N v% ?- h+ v5 ^
/ @3 S. I9 y) U/ `
1 m, `" b: x1 P! Q( v/ R: E3 t
7 V4 K" D! B2 z! v/ Y
# U1 |" M% g" I8 G- a& H+ c
7 X! X! L- f0 s; n+ n3 C- l# O# n(3)生成代码。/ a: A3 z8 R2 i" }6 Y" c. P
备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。
( w1 H4 A" Y# ]; I3 H6 G& R; B+ S3 n" }: }, G# j
6 Y6 c6 _( u5 U& W, [: p4 P3 V4 Y5 q" A0 m, H
(4)工程代码生成成功。3 S6 B+ n+ z3 g" j
! q( f& ^0 q1 o+ f
+ z% {. ^' {8 }4 F4 |
+ B, ~# `* g0 H2 K' d/ U 三、在KEIL 5中编写代码$ k- H( g0 c+ B7 w: X; g* f
1、使用KEIL 5(MDK)打开项目工程文件
# E8 U* a9 L* s源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。1 V5 i3 B. q P; w
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。
) \, g/ E% Z/ P8 R) @, D" L B1 \9 [
* c3 c0 k# A4 w. b9 ]5 z* t
* @! s# S( K7 t# f+ q; H2 R
) { t( o0 N. w( M Q+ C: }2、添加串口Transmit验证程序
0 m5 r4 f+ Y# b4 p5 B; p* ]% ~(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加控制程序,如下所示:实现每隔500ms后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换,并且串口每隔500ms打印一次。
& e) ?, k: W; e( y1 B& O. v2 E% F4 M" Q; }1 P
备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。# T M4 e. P7 ~
' W1 |% J2 ]; @4 m
% o4 i' g/ w; f# V+ e" H" i* e) l
v7 G1 q1 M& p! h9 }! k
7 N" V3 L' x) L$ }; Q6 H
, ^1 \2 t! @' w7 R7 l# s, [6 u( ]2 k(2)main 函数代码如下所示:
6 _& C0 T, G6 K3 O" _/ |$ ]6 @- int main(void)1 I& H5 W- y, N( x
- {5 Y4 h2 ], u/ | ~( ^
- /* USER CODE BEGIN 1 */
: j$ h9 }# N2 e" a j - uint8_t transmit_str[50]= {"hello world,this is transmit function!\r\n"};1 p0 r8 r/ q( P& u" B/ F; F0 F3 q
- /* USER CODE END 1 */- c( _ G+ N2 I" C# B" I$ p
- 3 C+ N, L: c5 p1 f' b* J/ F
- /* MCU Configuration--------------------------------------------------------*/
# f5 P# T) z$ k. Q+ I( i, I - % @" E+ P) T- B; P# H: L7 f
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */4 g% d+ W# t, [; q$ x
- HAL_Init();
- X$ V: a+ }; S1 m$ g -
2 X* c9 N7 T" H/ a- `/ U; V9 {/ A - /* USER CODE BEGIN Init */
& j7 t3 S- T9 ~- O( n- S, X& Y -
8 b/ {. G- q# m2 d: L7 D7 x4 T - /* USER CODE END Init */
% s I2 f; D% {$ m7 U( S9 Q% U - 6 ^8 g9 V3 R7 r7 W* M6 F
- /* Configure the system clock */& N/ c$ Z6 r* m, ?5 g' y
- SystemClock_Config();: G6 L g- c3 e* j! m
-
) o2 N- x2 E# P" @+ U5 ~ - /* USER CODE BEGIN SysInit */
: L8 K& y% }" O2 a' e - % [5 A# d9 H7 a- q
- /* USER CODE END SysInit */" Z' { E: ~+ K( A& ^
- 1 K1 r% @0 D3 y4 {1 t- E2 m
- /* Initialize all configured peripherals */1 I( H& N, z- F" t3 [$ ]# f
- MX_GPIO_Init();9 v2 ?' A, P% N Y7 d
- MX_USART1_UART_Init();; H/ e* M4 L& X T: _3 [
- /* USER CODE BEGIN 2 */1 o5 m# R, n( y, c5 J
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET); //初始化LED灯,默认点亮5 Y4 G0 G5 }; y' z4 |" I4 Z
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET); //初始化LED灯,默认点亮: m, h; J! z8 l' r; }+ [; S
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET); //初始化LED灯,默认点亮9 A* T8 a8 E5 A/ m+ U
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET); //初始化LED灯,默认点亮; U/ h4 I7 V9 b1 R
- + p- z% s/ o _% y/ ]# J$ r
- /* USER CODE END 2 */
7 y; @# L( s9 d3 m. ^ - 8 W$ W5 L$ w! w" o0 ?
- /* Infinite loop */
( o% _" j2 `" E5 n) t - /* USER CODE BEGIN WHILE */: h+ l# q4 F+ Y/ j" ]" V) X
- while (1)) n) O0 M; C q
- {
- U& y) x8 p% B* W" K; _1 d - /* USER CODE END WHILE */
4 R) |, C# Q. v: _ - W4 G0 X% f- b$ k
- /* USER CODE BEGIN 3 */6 ^2 z% \6 `5 C( W: L5 c
- HAL_Delay(500);
# X/ c2 d- X3 y- n - HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0); //反转LED点亮熄灭切换5 H2 m" J( H6 W5 v7 P( e( g
- HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1); //反转LED点亮熄灭切换9 t) g# Y% v. m. _
- HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2); //反转LED点亮熄灭切换4 a2 s+ H( N8 m- K8 ]
- HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3); //反转LED点亮熄灭切换
7 ?+ ]' k2 q: x( | - HAL_UART_Transmit(&huart1,transmit_str,sizeof(transmit_str),10); //每隔500ms打印一次9 q% Y# O3 E/ k4 R0 C# C
- }; K' w$ x* s/ N$ R, i
- /* USER CODE END 3 */% o4 z# F! t, h( c2 Y! n0 r
- }
复制代码
- {) K; a5 F1 N8 t: X8 B3、设置编程仿真下载模式
: {0 Y9 e. n5 g(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。2 \4 ]' z) i- e; T
' h* B% a* y$ y
. H: Y8 ?. q `( b; N" {# @! u# I
0 U8 P% U* a. S6 Y(2)点击编译,完成后提示“0 error(s),0 warning(s)”。
4 A0 u2 R1 H' a3 p* M
% q% i& I" H" |' w1 G
+ O% q x: S! \. N+ `/ S8 g0 R' H' Y: J: K% K# S& t& l) ? o
(3)点击Download(或者快捷键F8),即可下载程序。$ k$ n$ B+ q4 h
! X" t! O1 M8 e5 |/ b# Y
: I; u. ^8 X6 I% f1 ~. V# \
! e6 ]! i: W4 K, B$ e1 d% x(4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。% C# N% D( P0 D+ O
/ S) I- x! t6 [
% \6 C+ J; y1 `' f+ O" l3 d% g
4 {' c) o& x6 J$ V6 j4、串口Transmit打印实验效果展示: w; O+ g; J' j, Q0 Z
程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后每隔500ms闪烁一次,并且打开串口助手后(串口参数:波特率115200、N、8、1),可以看到Transmit每隔500ms打印一次log数据。
" p* |9 O' w U0 q7 s7 g
5 s0 O9 C/ p j" S5 b
) c$ c+ _5 b5 G) _5 Y0 P% d) C4 Z5 S/ z3 A; Y
————————————————
5 J( ~$ \, y& ?% k+ Z7 w版权声明:智能小屋ZYXC+ w8 |8 [/ c- ^5 H% ]3 }& K
# G& F0 C! J" h- T8 r" a. H4 R4 t* h- H9 W
|