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

STM32CubeIDE开发M4—使用PWM实现呼吸灯功能

[复制链接]
STMCU-管管 发布时间:2020-9-29 13:00
STM32CubeIDE开发M4—使用PWM实现呼吸灯功能一、新建工程% o2 l/ v, ]" E) D

6 d/ z6 V/ k  h4 O* B二、配置时钟

- S9 w/ u# I9 A0 Z5 }9 m0 {/ L% m9 c% J6 x

我们需要配置MCU的时钟,点击【RCC】,在【High Speed Clock(HSE)】中选择 【Crystal/Ceramic Resonator】, 也 就 是 晶 体 / 陶 瓷 晶 振 类 型 ,5 w: `! V% `3 w6 c1 q1 [4 c

1_meitu_3.jpg

" L4 m" M3 y8 d- n6 |! w& l, w4 {3 |) w1 B6 w! o& x6 N
然后时钟树配置如图,即MCU的主时钟配置为209MHz,同时定时器时钟也是209MHz;! D- ]+ L0 w8 E2 y- z+ ?


0 V5 y3 P9 y0 x/ e0 B- C

2_meitu_4.jpg

7 x4 @3 V( G' T9 G& z& l% P9 q# H) ?/ r4 n2 o9 B

+ J" A# I( I* }; M# X" ?1 X  p接下来设置定时器,首先将PI0设置为【TIM_CH4】,然后点击TIM5,勾选【Cortex-M4】,将通道4设置为PWM通道4输出,接下来设置预分频系数为208,自动重装载值为999,然后输出比较极性为高
- j- Y1 F7 T8 R' T7 q/ T. q
# o+ u& Z! j+ r


) w* e' s5 O/ q" [7 T4 U

3_meitu_5.jpg

0 S/ p  T7 ]8 Z3 D# `8 v6 Y% A8 M, v5 W

- `4 K3 z7 G( q. r1 [1 J4 T; g. j* g9 q
三、生成代码
& y- j6 N3 o+ Y
" ^) g! _+ x- u% n7 D8 W4 q

点击【Project Manager】->【Code Generator】,勾选“ Generate peripheral initialization as a pair of ‘.c/.h’files per peripheral”,让外设初始化代码单独生成


9 g# w5 y; U7 ^! f! e1 J8 e

: |) M" P; u8 Q. m

4_meitu_6.jpg

) C  w( p% q! z) e. Y
$ E3 p) Z. Z) `1 s! j; u
/ o, c, k; q9 m- ?' }$ D这样配置好后就可以点击生成代码了
9 ^4 C/ q9 H! H' }( |0 h0 }: ], y
0 @8 b8 d$ ~# S' Y7 Y

% X! F+ f7 E% ?9 J7 i6 z3 t

5_meitu_7.jpg
/ V/ @  p( |1 q1 d) D, d* Z9 v) H
' ^- w9 Z; P- Q' n

% q( g1 v& n3 [, @% ]) D
# W3 Y" x/ l+ A: S. b* W& P* }# n四、编写程序,实现呼吸灯功能
2 P5 }; Y5 ?& s( e/ J
' z( B+ ^4 o4 _: B' N% y: _

首先我们需要启动PWM,

  1. HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_4);
复制代码
' B8 B/ ]/ H2 w: N% P
/ G3 q' p  E, r- T3 ]) j
6_meitu_8.jpg

( H( @- W( K* C接下在while循环中编写如下代码,完成呼吸灯功能
- c9 o1 U) l, r- K     
  1. HAL_Delay(5);
    , q! o$ @4 v+ ?/ _" P, U0 J$ K
  2.         if(dir) pwmval++;                                // dir==1  pwmval递增
    0 Q" U0 `/ @: Q$ H0 i2 X& K
  3.         else pwmval--;                                    // dir==0  pwmval递减% n( O  h" j; d) s9 _
  4.         if( pwmval>500 ) dir=0;                        // pwmval到达500后,方向为递减
    0 U5 v, h. O# h+ M. O; u1 c
  5.         if( pwmval==0 ) dir=1;                        // pwmval递减到0后,方向改为递增1 G. j, v- U7 Q% Q, Y( F0 d
  6.         TIM5->CCR4 =  pwmval;                        // 修改比较值,修改占空比
复制代码

4 u1 u1 O- _  L% ?五、编译工程,上传到开发板% ?3 _# m( x/ p9 Q$ b9 H

编译工程,将生产的二进制文件上传的开发板,可以使用以下命令

! f9 t  h* `( |6 Q

  1. scp STM32MP157C_Prj_CM4.elf debian@192.168.31.210:/home/debian
复制代码

" h6 v& M  v- b1 L2 V- R/ Y1 i% L

然后将该文件复制到/lib/firmware文件夹下,注意,需要在root用户下8 S) ?7 o& {: X
然后使用如下命令加载到M4内核启动:


$ M% X& w/ _, L2 r; h

  1. echo STM32MP157C_Prj_CM4.elf > /sys/class/remoteproc/remoteproc0/firmware
    1 Y6 y, V0 K* l5 y: P7 j
  2. echo start > /sys/class/remoteproc/remoteproc0/state
复制代码

0 k7 @2 D, ]( w! ]$ L  F% [2 ?: P

6 I& Z' ~" E  ]# ?: ?9 D使用如下命令停止

( D' u; S5 V: _9 U  z# T$ e
4 y' T/ y) m; |; M) Z9 M! D+ k

3 H! \& i) F& i
  1. echo stop > /sys/class/remoteproc/remoteproc0/state
复制代码

1 W1 |8 ]2 o4 m; i; O8 T, A* U' d$ M

实现效果如下


0 l: m% a- l  Y

7.gif

) b- n/ R- y! F- B
5 E/ K7 t5 U5 Z- Q- ^# e
* e& [4 d8 f  g3 \) q+ J' w% u9 x
赞 收藏 评论1 发布时间:2020-9-29 13:00

举报

1个回答
windowsbbs 回答时间:2020-10-5 21:19:29
不错不错

所属标签

相似技术帖

官网相关资源

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