CH32V103 PWM输出的诡异现象
硬件是WCH-Link和CH32V103C8T6评估板,用WCH-Link给评估板供电并下载程序:评估板没有接任何额外的东西。
诡异现象一:
在例程:八、CH32V103应用教程——PWM输出 - RISC-V技术及应用论坛,开源指令集架构(ISA)论坛 - 21ic电子技术开**坛
的main()函数里,修改为:
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n", SystemCoreClock);
printf("This is printf example\r\n");
TIM1_PWMOut_Init(4999,7199,200);
while(1)
{
}
}其余什么也不变,编译下载后,LED灯不会闪烁,将WCH-Link从电脑的USB口拔掉再插上或者按Reset键也不管用。
但是只需将:
printf("This is printf example\r\n");
注释掉,LED灯就正常闪烁了。将WCH-Link拔掉再插上,LED灯也能正常闪烁。
诡异现象二:
将上述main()函数中的两个printf()函数都注释掉,编译下载后,这时,LED灯正常闪烁。但是若拔掉WCH-Link再插上,也就是给评估板重新供电,LED灯就不会闪烁了。只有将第一个printf取消注释,编译下载后,LED灯才恢复闪烁。
查了一天,只查到跟printf()函数是否被注释掉密切相关,但是不知道具体的原因。
上述两个诡异现象很容易复现,期望沁恒的技术人员能够复现并审查引起诡异现象的原因所在。
本帖最后由 xdqfc 于 2022-4-9 11:05 编辑
Print用的PA9跟PA10也是PWM端口吧,串口的初始化看一下吧。之前曾经遇到过的。
xdqfc 发表于 2022-4-9 11:04
Print用的PA9跟PA10也是PWM端口吧,串口的初始化看一下吧。之前曾经遇到过的。
...
谢谢回复。
PA8是TIM1_CH1通道,该引脚也跟USART1_CK功能复用了,MRS默认创建的工程模板使用串口1打印,TIM1_CH1和USART1_CK可能相互干扰了。
使用TIM2_CH1通道,也就是将PA0引脚接到LED1上,修改一下代码,编译并下载后,不存在上面描述的诡异现象了。
这似乎暗示,若使用串口1打印信息,最好不要使用TIM1。反之,若使用TIM1,最好也不要使用串口1。
您好,我这边到时候复现测试下给你反馈。 附件为我的测试例程,按你所述测试没有问题,你可以下载附件例程测试一下,注意程序中结构体初始化时赋值0,具体见附件例程。
本帖最后由 wgtwgtwgt 于 2022-4-11 15:27 编辑
RISCVLAR 发表于 2022-4-11 13:59
附件为我的测试例程,按你所述测试没有问题,你可以下载附件例程测试一下,注意程序中结构体初始化时赋值0 ...
感谢回复。
看到您将结构体进行初始化,明白了问题出在是否初始化结构体:在pwm.c文件中,若定义结构体时不进行初始化赋值,即:
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;就会出现上述不正常现象。
若定义结构体时进行初始化赋值,即:
GPIO_InitTypeDef GPIO_InitStructure={0};
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};
TIM_OCInitTypeDef TIM_OCInitStructure={0};则上述不正常现象消失了。
还有这么一出。{:lol:}{:lol:}
按楼主说的,自己跑了一遍,没发现问题啊。
页:
[1]