硬件使用STM32G030C8T6的PA6的AF5功能,即TIM16_CH1驱动一个无源蜂鸣器,输出一个2.7K-2.9K的方波,占空比为50%,始终没有成功,查阅datasheet发现PA6也可以映射AF1功能,即TIM3_CH1,将PWM初始化代码中的TIM16替换为TIM3,正常输出方波。MDK里查看了TIM3和TIM16配置后寄存器,完全一样,再改回TIM16,依然不行。确认了PA6的IO配置,尤其是AF寄存器,均是对的。同样的问题,在G070上验证了一样,也是TIM3能输出PWM而TIM16不行。哪位帮我分析分析,谢过!贴一下TIM3的代码 void TIM3_PWMConfig(void) { LL_TIM_InitTypeDef TIM_InitStruct = {0}; LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0}; LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3); TIM_InitStruct.Prescaler = SystemCoreClock/1000000-1; TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; TIM_InitStruct.Autoreload = 0xAC*2-1; //频率2.9KHz TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; LL_TIM_Init(TIM3, &TIM_InitStruct); LL_TIM_EnableARRPreload(TIM3); LL_TIM_OC_EnablePreload(TIM3, LL_TIM_CHANNEL_CH1); TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1; TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE; TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE; TIM_OC_InitStruct.CompareValue = 0xAC; TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH; LL_TIM_OC_Init(TIM3, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct); LL_TIM_OC_DisableFast(TIM3, LL_TIM_CHANNEL_CH1); LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_RESET); LL_TIM_DisableMasterSlaveMode(TIM3); LL_TIM_CC_EnableChannel(TIM3, LL_TIM_CHANNEL_CH1); LL_TIM_EnableCounter(TIM3); } |
adc采集电压
关于使用STM32G030C8T6的串口收发过程中串口接收问题
STM32G0B1的CAN自动重发
用stm32cubeide生成的STM32G030F6P6代码只要一开中断,任何中断程序都会跑飞.
STM32G0B1CBT6 双Bank升级,运行Bank2上Flash不能写问题
有关STM32G0B1RET6芯片FLASH擦除问题
修改stm32f407 tim14的ccr1,但是占空比不变?
修改stm32f407 tim14的ccr1,但是占空比不变
STM32G030烧录程序
Stm32G071 i2c slave配置问题
TEST TIM16 PA6.7z
2022-10-8 11:13 上传
点击文件名下载附件
下载积分: ST金币 -18.27 MB, 下载次数: 9, 下载积分: ST金币 -1
你好,感谢回复!用你的代码验证确实OK,后来我把你CUBE文件的库改成LL,其他设置不变,我一直都在使用LL库,就不行了,我查看了一下LL库生成的代码,没有使能TIM16以及CH1输出,添加了下面两行代码后,查看LL库和HAL库的寄存器结果是完全一样的,但LL库就是没有输出。
LL_TIM_EnableCounter(TIM16);
LL_TIM_CC_EnableChannel(TIM16, LL_TIM_CHANNEL_CH1);
确实是这个问题,之前参与对比的TIM3没有这个寄存器,CUBEMX使用LL库时没有置位BDTR->MOE,手动置位一下就好了。
感谢关注。
我也是这种问题,的确是这样解决的