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

HAL库呼吸灯实验

[复制链接]
GKoSon 发布时间:2018-4-20 13:25
挺郁闷的两块板子现在都不能连接了,等待工具来隔断PIN脚把BOOT0拉高吧。) s$ a; E* s) ^$ X
用被人的的板子继续实验。试试PWM波做呼吸灯。+ F! W' M3 |- [: I9 ^0 w, U
第一步选择引出来的PA9,接一个LED的+,在找一个GND把LED的- 导通。
% [$ T' j  K, V1 T, S工程只需要选选PA9模式(会有warnning)在选择TIMI-CH2就解除了
' s  z5 q5 G$ q8 s9 y 1.png
# J  t- R5 a, |# v, @: `2 u第二部:设置一下定时器吧 7200---1000
5 [. _" i5 H- Z1 Z5 B, x 2.png $ T6 Y- C" L- I& r6 k4 K
3.png
- ^# |. j2 ~$ E' K/ f8 R; g# m第三部直接生产代码吧。
' e1 x/ y1 \0 H/ r! ]5 U. f, L! EUSER_PWM_SetDutyRatio(&htim1,TIM_CHANNEL_2,n); 这个就是HAL设置占空比的API' J$ {; N7 S5 w8 L% I6 Y. Y* ?  [
自己改一改:
3 {5 m- s  H* s/ Evoid USER_PWM_SetDutyRatio(TIM_HandleTypeDef *htim,uint32_t Channel,uint8_t value)  $ f3 j, r! S- o3 v, b1 P+ ?+ f
{  
5 ]- I5 ~- g6 z2 |! P+ e9 z    TIM_OC_InitTypeDef sConfigOC;  , u: o- |) Y, _- y

! b' Q! x- e0 |$ C& I    uint32_t period=htim->Init.Period+1;  ) l7 V9 q2 B, y# p% z& X
    uint32_t pluse=((value * period)/100);  7 q0 _, h" {' v8 s

# I4 P2 P$ Z: f    sConfigOC.OCMode = TIM_OCMODE_PWM1;  
9 g- C4 n0 _1 H/ ?    sConfigOC.Pulse = pluse;  
) e% L  A* Y5 t2 c1 F# e0 i    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;  
0 V/ w1 r5 E, u+ {: @    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;  7 g0 {4 C. d3 s1 f8 z: C
    HAL_TIM_PWM_ConfigChannel(htim, &sConfigOC, Channel);  
& W" j+ \! d" ~9 e0 u    HAL_TIM_PWM_Start(htim, Channel);     
! Y8 s4 _, ?+ M( O- O& Y% J& G} % e& V. U- @5 e% B

$ V# T9 u. x" i% E# d该函数就是:把**定时器的**通道的比较值设置成**,而且他不是直接设置成**而是设置成**% 所以第三个传参是0--100$ k3 N8 R  _$ j' F+ l& m+ m
#include "math.h"
5 L9 A/ `, t% ~$ _7 o9 N) ^! f' E  while (1)8 L( V9 N# [- U9 X6 R
  {) b( F" Q5 A2 Z* O0 S  @# _8 t" j, m
HAL_Delay(50);# i6 w$ F2 K$ K$ m
USER_PWM_SetDutyRatio(&htim1,TIM_CHANNEL_2,n);                
/ x' t) \" s/ c  o, v- p, cn=100*sin(i*3.1415926/180);  ////////////MUST * /  N; k4 ?( o$ Z" c' C" j- c
i+=2;
. N* Q" B9 \; X, n) e! U0 ~6 iif(i>=180) i=0;                 
% ?* A; k  P/ K }
% {. V9 t) ~# Y6 @+ g0 }
  D( U; k# t, Q现在就可以呼吸了。效果的好坏主要在算法,现在用的sin函数,差强人意吧。! X% d% V. @( M! j
赞 收藏 评论5 发布时间:2018-4-20 13:25

举报

5个回答
GKoSon 回答时间:2018-4-20 13:36:29
上面外接的LED效果不好,试了试板子上的 很小的LED 蜜汁好看 而且也不用高级定时器,更加合理
% R! a( r5 x4 l$ k/ s( P& b3 V代码还是那个函数USER_PWM_SetDutyRatio(&htim4,TIM_CHANNEL_3,n);
1.png
2.png
Dandjinh 回答时间:2018-4-20 13:32:56
把定时器设置成PWM输出,启用DMA,用DMA控制脉宽。
GKoSon 回答时间:2018-4-20 16:51:52
Dandjinh 发表于 2018-4-20 13:324 G1 Y! Z/ P) K3 t
把定时器设置成PWM输出,启用DMA,用DMA控制脉宽。

: W8 M# K- J% ^好主意 有空研究研究
GKoSon 回答时间:2018-4-20 17:17:40
本帖最后由 与龙共舞 于 2018-4-21 10:38 编辑 ' Z0 l0 T( O4 U+ _

9 I7 \) r& s5 g& t: u) Z噢  两次实验不一样  效果不好的是7200---1000  效果好的是72000---100" H+ [6 N- m9 g/ m+ A! _( ~$ r! @2 g
不对  不对 u16  没有72000的 MX在65535就写不进去了6 o' W$ c6 k, b
GKoSon 回答时间:2018-4-21 10:46:00
7200---100
( n' ~* g" d+ M& z8 e. [" {- K0 f9 ?! m6 L- |. T
void MX_TIM4_Init(void)* w+ h8 m$ E2 t* R' J
{
3 ^* ^; V. s5 k+ q- A, |  TIM_MasterConfigTypeDef sMasterConfig;6 _9 N- [" m. m! i4 H& w
  TIM_OC_InitTypeDef sConfigOC;
) `3 F$ d1 _( R/ t$ ]
1 y8 t3 B6 R. S" t) c! o  htim4.Instance = TIM4;9 f, G& N5 b: m' G- D
  htim4.Init.Prescaler = 7200-1;! O2 v3 m2 }7 N# g' B
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;+ s& G; }0 p% e" H; h; a5 t
  htim4.Init.Period = 100-1;
5 q2 s. c6 o7 w! v! Y0 }0 y; m  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;" r6 {; c  [$ `# n
  if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
- G* Q3 g0 P. u. R, L6 i  {
# k6 K9 ~, `) j# R9 S- X, d    Error_Handler();
4 V5 @9 \4 _- @& T" N  }
/ z6 I8 ]/ o0 T) c
- L" H3 u: g% M; g7 m* h  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;: d0 h9 C) r4 K$ g* b! |9 j+ e. W2 m
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
: a' ]# [" j6 i: `: h! G3 H6 j% _  if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
" T& S  H7 c  N; {  {' }. O& I- Z' @9 M' E! k8 ^* q
    Error_Handler();
! |7 ]$ Y9 P* h; B0 u" S  }2 G1 l. T, K3 ]3 z8 ~

/ K/ j8 x- c" y; w7 @: t9 m/ z  sConfigOC.OCMode = TIM_OCMODE_PWM1;
) @* t+ [0 R6 x3 H) b* \! D6 k. w3 v7 F  sConfigOC.Pulse = 0;( w. K. m% n& f" q4 n
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
* W6 y- h/ ~- q  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;* e% f5 n% h+ U+ x7 i. o1 ~5 u/ `  h
  if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)0 P+ Y# o$ g" J0 o
  {  S/ q* C" p5 j" W4 h8 A
    Error_Handler();
2 {: Q: f3 u# f  }7 F& C  f4 G/ ]0 T
" F% j$ J" F$ r. p
  HAL_TIM_MspPostInit(&htim4);
5 c. z8 N3 b' O  N: n7 S  Z! i/ Y6 T
}
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版