[RISC-V MCU 应用开发] CH32V103 PWM输出的诡异现象

[复制链接]
2276|7
 楼主| wgtwgtwgt 发表于 2022-4-8 18:16 | 显示全部楼层 |阅读模式
硬件是WCH-Link和CH32V103C8T6评估板,用WCH-Link给评估板供电并下载程序:
961686250076f8e085.png
评估板没有接任何额外的东西。

诡异现象一:
在例程:八、CH32V103应用教程——PWM输出 - RISC-V技术及应用论坛,开源指令集架构(ISA)论坛 - 21ic电子技术开**坛
的main()函数里,修改为:
  1. int main(void)
  2. {
  3.       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  4.       Delay_Init();
  5.       USART_Printf_Init(115200);
  6.       printf("SystemClk:%d\r\n", SystemCoreClock);

  7.       printf("This is printf example\r\n");

  8.       TIM1_PWMOut_Init(4999,7199,200);
  9.       while(1)
  10.       {
  11.       }
  12. }
其余什么也不变,编译下载后,LED灯不会闪烁,将WCH-Link从电脑的USB口拔掉再插上或者按Reset键也不管用。
但是只需将:
  1. 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:04 | 显示全部楼层
本帖最后由 xdqfc 于 2022-4-9 11:05 编辑

Print用的PA9跟PA10也是PWM端口吧,串口的初始化看一下吧。之前曾经遇到过的。
 楼主| wgtwgtwgt 发表于 2022-4-9 13:16 | 显示全部楼层
xdqfc 发表于 2022-4-9 11:04
Print用的PA9跟PA10也是PWM端口吧,串口的初始化看一下吧。之前曾经遇到过的。
...

谢谢回复。
467456251152aaaf01.png
PA8是TIM1_CH1通道,该引脚也跟USART1_CK功能复用了,MRS默认创建的工程模板使用串口1打印,TIM1_CH1和USART1_CK可能相互干扰了。
使用TIM2_CH1通道,也就是将PA0引脚接到LED1上,修改一下代码,编译并下载后,不存在上面描述的诡异现象了。

这似乎暗示,若使用串口1打印信息,最好不要使用TIM1。反之,若使用TIM1,最好也不要使用串口1。
RISCVLAR 发表于 2022-4-10 11:50 | 显示全部楼层
您好,我这边到时候复现测试下给你反馈。
RISCVLAR 发表于 2022-4-11 13:59 | 显示全部楼层
附件为我的测试例程,按你所述测试没有问题,你可以下载附件例程测试一下,注意程序中结构体初始化时赋值0,具体见附件例程。

7、PWM输出.zip

576.85 KB, 下载次数: 4

 楼主| wgtwgtwgt 发表于 2022-4-11 14:57 | 显示全部楼层
本帖最后由 wgtwgtwgt 于 2022-4-11 15:27 编辑
RISCVLAR 发表于 2022-4-11 13:59
附件为我的测试例程,按你所述测试没有问题,你可以下载附件例程测试一下,注意程序中结构体初始化时赋值0 ...

感谢回复。
看到您将结构体进行初始化,明白了问题出在是否初始化结构体:在pwm.c文件中,若定义结构体时不进行初始化赋值,即:
  1.     GPIO_InitTypeDef GPIO_InitStructure;
  2.     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  3.     TIM_OCInitTypeDef TIM_OCInitStructure;
就会出现上述不正常现象。
若定义结构体时进行初始化赋值,即:
  1.     GPIO_InitTypeDef GPIO_InitStructure={0};
  2.     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};
  3.     TIM_OCInitTypeDef TIM_OCInitStructure={0};
则上述不正常现象消失了。


xdqfc 发表于 2022-4-12 10:28 | 显示全部楼层
还有这么一出。
sunny阳光 发表于 2022-4-29 10:33 | 显示全部楼层
按楼主说的,自己跑了一遍,没发现问题啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

191

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部