• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32F103C8T6 RTOS + 定时器PWM失效

lixiang 2021-03-01 浏览量:987
请教各位一个问题
代码使用RTOS(UCOSII + 定时器PWM) 控制电机.
但是发现一个奇怪的想象在调用后发现有时候函数执行完毕没有任何反应使用示波器测量后发现未产生PWM.

代码如下:

  1.     GPIO_InitTypeDef   GPIO_InitStructure;
  2.     TIM_OCInitTypeDef TIM_OCInitStructure;

  3.     cpu_sr = OS_CPU_SR_Save();
  4.    
  5.     GPIO_InitStructure.GPIO_Pin   = xxxxx;
  6.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  7.     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  8.     GPIO_Init(xxxxx &GPIO_InitStructure);  
  9.     GPIO_ResetBits(xxxxx xxxxx);

  10.     GPIO_InitStructure.GPIO_Pin   = xxxxx;
  11.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
  13.     GPIO_Init(xxxxx &GPIO_InitStructure);  

  14.     TIM_Cmd(TIM4 DISABLE);
  15.     TIM_OC1PreloadConfig(TIM4 TIM_OCPreload_Enable);     
  16.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  17.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  18.     TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_Low;
  19.     TIM_OCInitStructure.TIM_Pulse = 500;
  20.     TIM_OC2Init(TIM4 &TIM_OCInitStructure);

  21.     TIM4->EGR = TIM_PSCReloadMode_Immediate;  
  22.     TIM_Cmd(TIM4 ENABLE);

  23.     OS_CPU_SR_Restore(cpu_sr);


m data-ke-onclick="copycode($('code_imF'));">复制代码


目前在不停的测试中发现几点:
1. 如果更改优化等级的话会生效但是其他的函数又会出现问题.
2. 目前如果不使用PWM一切正常函数调用也正常.
3. 定时器使用的1K频率.

想请问下各位是不是哪里弄错了?


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 那就是编译器优化导致的,把优化等级改最低,还有你可以做个实验,在初始化后不要运行其他任务看看还正常吗,排除问题
    • 发布于 2021-03-01
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4
  • 可以对编译器进行设置,达到想要的效果
    • 发布于2021-03-01
    • 举报
    • 评论 0
    • 0
    • 0

  • TIM4 的初始化是不是有问题?
    • 发布于2021-03-02
    • 举报
    • 评论 0
    • 0
    • 0

  • PWM用的是哪个定时器,是不是与RTOS时基的定时器冲突了
    • 发布于2021-03-11
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32F103C8T6 RTOS + 定时器PWM失效