打印
[RISC-V MCU 应用开发]

CH32V103 PWM输出的诡异现象

[复制链接]
1451|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wgtwgtwgt|  楼主 | 2022-4-8 18:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件是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: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端口吧,串口的初始化看一下吧。之前曾经遇到过的。
...

谢谢回复。

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 | 只看该作者
您好,我这边到时候复现测试下给你反馈。

使用特权

评论回复
5
RISCVLAR| | 2022-4-11 13:59 | 只看该作者
附件为我的测试例程,按你所述测试没有问题,你可以下载附件例程测试一下,注意程序中结构体初始化时赋值0,具体见附件例程。

7、PWM输出.zip

576.85 KB

使用特权

评论回复
6
wgtwgtwgt|  楼主 | 2022-4-11 14:57 | 只看该作者
本帖最后由 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};
则上述不正常现象消失了。


使用特权

评论回复
7
xdqfc| | 2022-4-12 10:28 | 只看该作者
还有这么一出。

使用特权

评论回复
8
sunny阳光| | 2022-4-29 10:33 | 只看该作者
按楼主说的,自己跑了一遍,没发现问题啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

191

帖子

3

粉丝