OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1464|回复: 2

求助,请教一个关于PWM呼吸灯HAL库视频源码的问题

[复制链接]

2

主题

6

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2024-2-1
在线时间
3 小时
发表于 2024-2-1 14:05:32 | 显示全部楼层 |阅读模式
1金钱
开发板是stm32f103系列的。视频源码中已经在 HAL_TIM_PWM_MspInit 这个函数中配置了 GPIOB 的 PIN_5 为复用推挽输出模式,
main函数中在调用 gtim_timx_pwm_chy_init() 函数之前调用了 led_init() 函数,
led_init() 函数将 GPIOB 的 PIN_5 配置为 推挽输出模式,
个人认为没有必要调用 led_init() 这个函数。
但是实测如果不调用  led_init() 函数而只调用  gtim_timx_pwm_chy_init() 函数,则不能产生呼吸灯的效果。
请教一下为什么会这样。

附视频源码工程。
02 通用定时器PWM输出实验.zip (1.05 MB, 下载次数: 2)

最佳答案

查看完整内容[请看2#楼]

是啊 真TM奇了怪了 为啥呢 因为在gtim.c文件中第10行 void gtim_timx_pwm_chy_init(uint16_t arr, uint16_t psc) 这个函数中的局部变量 TIM_OC_InitTypeDef timx_oc_pwm_chy; 没有初始化!!! 错误的情况下 这个结构体的某个成员初始值不是0 导致TIM3的CCMR1寄存器的CC2S位会被错误的配置成输入模式 但是LED_Init中的某些操作 刚好把timx_oc_pwm_chy某个成员占用的那块内存给洗成0了所以就正常执行了 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
发表于 2024-2-1 14:05:33 | 显示全部楼层
是啊 真TM奇了怪了

为啥呢
因为在gtim.c文件中第10行
void gtim_timx_pwm_chy_init(uint16_t arr, uint16_t psc)
这个函数中的局部变量    TIM_OC_InitTypeDef timx_oc_pwm_chy;
没有初始化!!!

错误的情况下 这个结构体的某个成员初始值不是0 导致TIM3的CCMR1寄存器的CC2S位会被错误的配置成输入模式

但是LED_Init中的某些操作 刚好把timx_oc_pwm_chy某个成员占用的那块内存给洗成0了所以就正常执行了

第10行改成这个TIM_OC_InitTypeDef timx_oc_pwm_chy = {0}; 再注释掉LED_Init就能正常闪烁
如果不改的话 就要把这个结构体里的每个成员都赋值才行 原子只把用到的赋值了

找起来真是费劲
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2024-2-1
在线时间
3 小时
 楼主| 发表于 2024-2-2 22:43:31 | 显示全部楼层
babyrabbit 发表于 2024-2-1 14:05
是啊 真TM奇了怪了

为啥呢

哇偶!非常非常感谢大佬的细心解答!!!
没想到这个问题的原因这么离谱。大佬能发现这个问题的原因在下十分佩服。
再次献上谢意,感谢大佬抽空解答这个问题!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 07:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表