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

基于STM32L051使用CubeMX生成工程文件ST系列芯片通用经验分享

[复制链接]
攻城狮Melo 发布时间:2023-6-12 19:33
前言

我前面的文章分析过,因为STMF103系列芯片的涨价,我更换了芯片,使用STM32L051 替换 STM32F103 系列。

最近把以前的笔记整理一下,当做记录分享。

板子到手,开始使用STM32L051测试,当然得使用STM32CubeMX工具,正好借这个机会简单的说明一下如何使用 STM32CubeMX 开发 STM32芯片。

新建工程,选择对应芯片,然后设置下相应的引脚(需要根据自己的原理图)。

本文主要在于说明使用 STM32CUbeMX 生成一个STM32 最小系统板子的工程步骤,适合所有的 STM32F STM32L 系列芯片!

& c3 \  g5 `; d$ Q

1、时钟相关

打开STM32CubeMX ,选择好自己用的芯片,根据下面步骤进行设置:

" ]( ?& [3 d& o7 f

1.1 RCC


  a' h2 A; [  i

微信图片_20230612193258.png


' H% L6 }2 Z: Y, D

栏目中的选项如下:

  • Disable(禁用)
  • BYPASS Clock Source(旁路时钟源)
  • Crystal/Ceramic   Resonator(晶体/陶瓷晶振)( u# J1 s8 o9 O6 A& h

如上图一样有外部晶振选择  Crystal/Ceramic Resonator

2 _# u. h# _. x0 a8 t

1.2 Clock Configuration 时钟设置‘在设置定时器参数之前,需要先确定系统的时钟,在这里我们第一次测试,用不到低功耗,所以将系统时钟设置为32MHZ最大值,如下图:; A$ t+ v9 e. V( ~+ @7 x

微信图片_20230612193254.png


4 K, F, R5 [8 P. k/ {; k- a* w2、调试相关

在SYS中选择 SWD烧录模式  Debug Serial Wire


& y! P6 D% z) B! q9 i0 c) \; ?

微信图片_20230612193246.png

5 C% {" B# Q0 y3 [

3、外设相关3.1 USART 串口

使用串口1(USART1)作为调试串口(PA9 PA10),选择Asynchronous (异步通讯模式),打开串口中断,设置好自己需要的波特率,串口1设置完成。


. b! o" l; V8 J% ?0 c

微信图片_20230612193231.png

6 T% P+ |" z1 \& z/ q# F

还需要使用另外一个串口与无线模块通讯,PCB图纸上使用的是(PB10 PB11),同样按照上图设置,这两个端口在STM32F103上是正常的串口3,但是在STM32L051上是LPUART1,是一个低功耗串口,这里并不需要用到它的低功耗功能,就直接和普通串口一样设置,把他当做一个普通串口使用。

, ~! T' n' ]9 E$ A* t

3.2 GPIO(LED、按键)


% A; k  w& t/ g8 m

LED灯设置为输出,按钮设置为输入, 选中对应的IO口,选择模式,如下图:

微信图片_20230612193222.png

" G3 f( r# v) m$ M/ _" d

还可以对每个IO口进行设置,如下图:

# Q( k1 |- m/ X2 h/ D

微信图片_20230612193219.png


2 y7 ]6 z$ q$ l" A8 w8 z- q0 g3.3 TIM 定时器

查阅资料STM32L051C8T6有5个定时器 通用定时器(TIM2、TIM21、TIM22、),基本定时器(TIM6),低功耗定时器(LPTIM1)。

因为用不到低功耗定时器,主要还是不确定低功耗定时器是否和普通定时器一样用,本次目的主要还是想先测试出效果,所以选用通用定时器,其中Clock Source 选择为 internal Clock ;

& z& Y2 O, y5 w+ B, \: o- E5 o$ B

微信图片_20230612193209.png

/ E" t( g' C" s6 ?

定时器选中还有一个重要的配置:


2 a+ x! ~1 i7 h! h9 ~

微信图片_20230612193159.png


$ M* r" b5 _9 {. ~

3.3.1 定时器时间计算说明

在上面的时钟设置好以后,就可以设置定时器里面的ARR和PSC:

  • ARR  :重装载值(auto reload register)
  • PSC  :预分频器(pre-scaler)
    ) v' B( v8 _- A; N; d; k

公式如下:

  1. //Tclk:定时器的输入时钟频率(单位MHZ)
    # G0 x  A# n  I9 ?; ?
  2. //Tout:定时器溢出时间(单位为us
    1 I2 q( r5 Q: @; n3 ~# e
  3. Tout = ((arr+1)*(psc+1))/Tclk ;
复制代码
$ z; ^+ `, I: x" q: E! P+ F

比如上图中的定时器,就设置成了 定时时间1S,每 1S 就会产生一次中断。

如何理解这个时间:

比如F103晶振 72M,也就是一秒计 72 00 0000 次,72 00 0000 Hz0 Y( ?+ ]( S" t! s
6 A, Q  S+ o/ h  r6 b1 _% F. C
Prescaler预分频值设置7200-1是因为预分频值从0开始5 }" J3 p! |9 S

2 p$ e; ^; }- ?我们把72M除以预分频值7200就是我们定时器速度,速度变为了一秒记10000次
* W( l4 m: h$ k- n
9 u$ i" J% E% s7 ~2 W: F3 }5 eCounter Period重装载值设置为10000,也就是定时器从0开始记了10000次以后就又回归从0开始计算到10000一直循环# ?! d' `' ^$ p- P

  a; V; N7 l5 Z  X( M$ m# u我们定时器的速度为1秒记10000次,重装载值也刚好是10000,那么记一次重装载要的时间就是1秒,那么速度刚好是1Hz* ~" G) o9 M$ L# b# b2 s

# o! V6 y2 z+ z' \: ?比如我们设置重装载值为1000,定时器速度是10000Hz,记一次重装载值的速度只要0.1秒也是10Hz1 {/ C- \5 A  ^" J
- A: F" D- B  d0 C' n# c  H
定时器的10000除以重装载的1000也就是10,就是定时器配置成了10Hz

在本次测试中,其中使用TIM2,TIM21 2个通用定时器,TIM2设置成为1S,作为普通逻辑的定时器,TIM21设置为1ms 作为按钮的定时器:

  z4 c3 c6 s1 {+ ?2 C# \( y
; S% a# K9 v. J0 x

" v' X' A7 g7 k" S3.4 IWDG 独立看门狗

产品生产往往会有意想不到的情况,在程序设计可能会有问题,在硬件上也可能会遇到特殊情况,看门狗的加入往往会对产品差错起到一定的帮助作用。

选择IWDG,使能独立看门狗:

# B' Z# Y% p2 e$ d

微信图片_20230612193149.png


2 i1 |9 i$ X8 R/ u$ l7 L

配置看门狗的时间:


' _; y: n! B& b( q

微信图片_20230612193145.png


2 a4 S- L$ G) m* B9 |; ?* l

这里重装载值我设置了3700,是因为好计算,使能了独立看门狗以后可以在时钟图中看到独立看门狗的时钟频率为37KHZ:

7 y- b( t$ S$ R" Q& b. t

微信图片_20230612193137.png

- A8 A$ K8 K" D/ x3 ]# L' B& t2 d# B

用到几个公式:f=1/T,单位是s,单位是HZ。(其中大写字母T,表示周期,小写字母f表示频率) 看门狗 f=  看门狗时钟频率  /  (预分频系数  * 重装载值)  = 37000HZ / (64 * 3700)=10/64 看门狗时间  T = 6.4s (不知道有没有算错= =!在后面测试过程中确认了,计算时正确的!)

以上设置,可以把基本的功能测试使用起来。


6 G2 E# Z% g! W% ?+ B4、生成工程

最后一步生成工程的时候,再次提醒一下,路径中不能又中文,否则会出问题!(虽然在网上看到有例子存在中文也没有问题的情况,但是自己生成的时候确实出了问题,所以改个英文路径问题不大)。

6 w5 S7 f9 F  m+ d- f

4.1 Project 栏目

项目名字,工程路径,生成工程后想要使用的IDE,堆栈大小,SDK软件包:

微信图片_20230612193123.png


* n3 l/ s  F7 O9 s* L2 O# n! C4.2 Code Generator栏目

生成工程的一些选项:


/ z5 m* x1 g5 N4 c+ X3 Z9 E

微信图片_20230612193058.png

: y5 d8 [2 w1 k$ p) ^. F: q% U

上图中勾选的 4个选项意思如下:

  • copy all used libraries into the project folder
    9 R; e* @2 K1 V1 ^复制所有库文件(不管工程需要用到还是没用到)到生成的工程目录中。

  • generate peripheral initialization as a pair of ....: 每个外设生成独立的.C .H文件

  • keep user code when re-generating 重新生成代码时,保留用户代码(在用户规定的书写范围内)

  • delete previously generated files when not re-generated
    / z7 N; P" g5 K- Y- `( `; R( q8 V删除以前生成但现在没有选择生成的文件

    % u$ C3 H$ J. s" \

最后点击GENERATE CODE 生成工程即可,生成工程说明就到这里,下一篇我们会根据生成的工程文件进行对应的修改进行测试。

0 \3 Q- y" m3 p! J3 j

转载自:矜辰所致

如有侵权请联系删除
# k0 U: \! c; q$ h- e! L! W
6 _* Z: j0 A. B% {6 H6 [
; F1 o0 ?0 N9 W* I
赞 收藏 评论0 发布时间:2023-6-12 19:33

举报

0个回答

所属标签

相似技术帖

官网相关资源

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