STM8S(105K4)使用笔记——通过TIM1输出PWM做呼吸灯

这篇博客介绍了如何使用STM8S105K4的TIM1输出PWM来制作呼吸灯。详细阐述了呼吸灯的功能需求设置,如周期和刷新率,并解析了TIM1的PWM配置,包括TIM1_Prescaler和TIM1_Period的作用。通过引入Gamma系数解决了人眼对亮度认知的非线性问题,以实现视觉上的线性亮度变化。文章还提醒读者注意时钟门控的状态,以避免调试困扰。
摘要由CSDN通过智能技术生成

引言

本篇博客将讲解PWM做呼吸灯的一个方法。
本篇博客将不会从TIM1设置做引入,而是从呼吸灯实际功能实现做引入。


STM8S105K4相关

已知的可以作为TIM1 PWM的输出通道为PC1、PC2、PC3、PC4。
已知可选的TIM1时钟为fmaster。

若使用的STM8S的芯片不为105K4,请查阅芯片相对应的文档,确认TIM1的PWM的输出通道,同时设置相应的选项字节。

呼吸灯功能需求设置

呼吸灯有这么两个最常见的功能需求:

  • LED灯一次灭到亮的耗时T(s),即周期/2
  • LED灯的刷新率P(Hz)

由这两个参数可得:

  • LED灯一次灭到亮需要刷新的次数N,N = T × P

例如:

  • LED灯一次灭到亮需求为1.5s
  • LED灯的刷新率为60Hz(约每0.017s刷新一次)
  • LED灯一次灭到亮需要刷新的次数为90次

至此,LED功能需求约定完成。


TIM1的PWM设置

由ST所提供的官方库中,有这么一个函数。

/**
  * @brief  Initializes the TIM1 Time Base Unit according to the specified parameters.
  * @param  TIM1_Prescaler specifies the Prescaler value.
  * @param  TIM1_CounterMode specifies the counter mode  from @ref TIM1_CounterMode_TypeDef .
  * @param  TIM1_Period specifies the Period value.
  * @param  TIM1_RepetitionCounter specifies the Repetition counter value
  * @retval None
  */
void TIM1_TimeBaseInit(uint16_t TIM1_Prescaler,
                       TIM1_CounterMode_TypeDef TIM1_CounterMode,
                       uint16_t TIM1_Period,
                       uint8_t TIM1_RepetitionCounter)
{
   
  /* Check parameters */
  assert_param(IS_TIM1_COUNTER_MODE_OK(TIM1_CounterMode));
  
  /* Set the Autoreload value */
  TIM1->ARRH = (uint8_t)(TIM1_Period >> 8);
  TIM1->ARRL = (uint8_t)(TIM1_Period);
  
  /* Set the Prescaler value */
  TIM1->PSCRH = (uint8_t)(TIM1_Prescaler >> 8);
  TIM1->PSCRL = (uint8_t)(TIM1_Prescaler);
  
  
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值