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

HAL库呼吸灯实验

[复制链接]
GKoSon 发布时间:2018-4-20 13:25
挺郁闷的两块板子现在都不能连接了,等待工具来隔断PIN脚把BOOT0拉高吧。
用被人的的板子继续实验。试试PWM波做呼吸灯。
第一步选择引出来的PA9,接一个LED的+,在找一个GND把LED的- 导通。
工程只需要选选PA9模式(会有warnning)在选择TIMI-CH2就解除了
1.png
第二部:设置一下定时器吧 7200---1000
2.png
3.png
第三部直接生产代码吧。
USER_PWM_SetDutyRatio(&htim1,TIM_CHANNEL_2,n); 这个就是HAL设置占空比的API
自己改一改:
void USER_PWM_SetDutyRatio(TIM_HandleTypeDef *htim,uint32_t Channel,uint8_t value)  
{  
    TIM_OC_InitTypeDef sConfigOC;  

    uint32_t period=htim->Init.Period+1;  
    uint32_t pluse=((value * period)/100);  

    sConfigOC.OCMode = TIM_OCMODE_PWM1;  
    sConfigOC.Pulse = pluse;  
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;  
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;  
    HAL_TIM_PWM_ConfigChannel(htim, &sConfigOC, Channel);  
    HAL_TIM_PWM_Start(htim, Channel);     
}

该函数就是:把**定时器的**通道的比较值设置成**,而且他不是直接设置成**而是设置成**% 所以第三个传参是0--100
#include "math.h"
  while (1)
  {
HAL_Delay(50);
USER_PWM_SetDutyRatio(&htim1,TIM_CHANNEL_2,n);                
n=100*sin(i*3.1415926/180);  ////////////MUST * /
i+=2;
if(i>=180) i=0;                 
}

现在就可以呼吸了。效果的好坏主要在算法,现在用的sin函数,差强人意吧。
收藏 评论5 发布时间:2018-4-20 13:25

举报

5个回答
GKoSon 回答时间:2018-4-20 13:36:29
上面外接的LED效果不好,试了试板子上的 很小的LED 蜜汁好看 而且也不用高级定时器,更加合理
代码还是那个函数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:32
把定时器设置成PWM输出,启用DMA,用DMA控制脉宽。

好主意 有空研究研究
GKoSon 回答时间:2018-4-20 17:17:40
本帖最后由 与龙共舞 于 2018-4-21 10:38 编辑

噢  两次实验不一样  效果不好的是7200---1000  效果好的是72000---100
不对  不对 u16  没有72000的 MX在65535就写不进去了
GKoSon 回答时间:2018-4-21 10:46:00
7200---100

void MX_TIM4_Init(void)
{
  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;

  htim4.Instance = TIM4;
  htim4.Init.Prescaler = 7200-1;
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim4.Init.Period = 100-1;
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
  {
    Error_Handler();
  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }

  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  {
    Error_Handler();
  }

  HAL_TIM_MspPostInit(&htim4);

}

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版