耀天宸 2022-05-29 20:31 采纳率: 50%
浏览 23

miniSTM32F1只能有一个频率PWM输出吗?

问题遇到的现象和发生背景

stm32F1的PWM输出,想用两个定时器输出两种不同的pwm信号,但是定义第二个定时器函数后就报错说已经被定义了,试了时钟8和4都不行,甚至我改一个函数的名字都不行

问题相关代码,请勿粘贴截图
void TIM1_PWM_Init(u16 arr,u16 psc)
{                              
    //此部分需手动修改IO口设置
    RCC->APB2ENR|=1<<11;     //TIM1时钟使能    
    GPIOA->CRH&=0XFFFFFFF0;    //PA8清除之前的设置
    GPIOA->CRH|=0X0000000B;    //复用功能输出 
    GPIOA->CRH&=0XFFFF0FFF;    //PA11清除之前的设置
    GPIOA->CRH|=0X0000B000;    //复用功能输出 
    
    TIM1->ARR=arr;            //设定计数器自动重装值 
    TIM1->PSC=psc;            //预分频器设置
  
    TIM1->CCMR1|=7<<4;      //CH1 PWM2模式         
    TIM1->CCMR1|=1<<3;         //CH1预装载使能    
  TIM1->CCER|=1<<0;       //OC1 输出使能    
    
    TIM1->CCMR2|=7<<12;      //CH4 PWM2模式         
    TIM1->CCMR2|=1<<11;     //CH4预装载使能          
    TIM1->CCER|=1<<12;       //OC4 输出使能    

    TIM1->BDTR|=1<<15;       //MOE 主输出使能
    TIM1->CR1=0x0080;       //ARPE使能 
    TIM1->CR1|=0x01;        //使能定时器1 

}  


void TIM4_PWM_Init(u16 arr,u16 psc)
{
    RCC->APB1ENR|=1<<2;     //TIM8时钟使能
    GPIOB->CRH&=0XFFFFFF0F;    //PC9清除之前的设置
    GPIOB->CRH|=0X000000B0;    //复用功能输出
    GPIOB->CRH&=0XFFFFFFF0;    //PC8清除之前的设置
    GPIOB->CRH|=0X0000000B;    //复用功能输出
    GPIOB->CRL&=0X0FFFFFFF;    //PC7清除之前的设置
    GPIOB->CRL|=0XB0000000;    //复用功能输出
    GPIOB->CRL&=0XF0FFFFFF;    //PC6清除之前的设置
    GPIOB->CRL|=0X0B000000;    //复用功能输出
    
    TIM4->ARR=arr;            //设定计数器自动重装值 
    TIM4->PSC=psc;            //预分频器设置
    
    TIM4->CCMR1|=7<<4;      //CH1 PWM2模式         
    TIM4->CCMR1|=1<<3;         //CH1预装载使能    
  TIM4->CCER|=1<<0;       //OC1 输出使能    
    
    TIM4->CCMR1|=7<<12;      //CH1 PWM2模式         
    TIM4->CCMR1|=1<<11;         //CH1预装载使能    
  TIM4->CCER|=1<<12;       //OC1 输出使能    
    
    TIM4->CCMR2|=7<<4;      //CH4 PWM2模式         
    TIM4->CCMR2|=1<<3;     //CH4预装载使能          
    TIM4->CCER|=1<<0;       //OC4 输出使能    
    
    TIM4->CCMR2|=7<<12;      //CH4 PWM2模式         
    TIM4->CCMR2|=1<<11;     //CH4预装载使能          
    TIM4->CCER|=1<<12;       //OC4 输出使能    

    //TIM4->BDTR|=1<<15;       //MOE 主输出使能
    TIM4->CR1=0x0080;       //ARPE使能 
    TIM4->CR1|=0x01;        //使能定时器1 

}

运行结果及报错内容
*** Using Compiler 'V5.06 update 1 (build 61)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
Build target 'Target 1'
compiling timer.c...
..\HARDWARE\LED\led.h(21): error:  #130: expected a "{"
  void LED_Init(void);    //??始化                             
..\HARDWARE\TIMER\timer.c(21): warning:  #12-D: parsing restarts here after previous syntax error
  {                                       
..\HARDWARE\TIMER\timer.c(72): error:  #247: function "TIM4_PWM_Init" has already been defined
  void TIM4_PWM_Init(u16 arr,u16 psc)
..\HARDWARE\TIMER\timer.c: 1 warning, 2 errors
compiling test.c...
test.c(12): error:  #130: expected a "{"
  int main(void)
test.c: 0 warnings, 1 error
"..\OBJ\test.axf" - 3 Error(s), 1 Warning(s).
Target not created.
Build Time Elapsed:  00:00:01

我的解答思路和尝试过的方法

只要把TIM8_PWM_Init相关的都注释掉,包括头文件的,就不报错了,我试过改函数名字,没有用,换了个时钟还是不行。

我想要达到的结果

想要的效果就是没有报错

  • 写回答

1条回答 默认 最新

  • qllaoda 2022-05-30 10:04
    关注

    你这个标题和内容打不上啊,错误完全是很低级的语法错误而已,跟标题说的完全没有关系。按错误提示去改就是了。比如第一个错误
    ..\HARDWARE\LED\led.h(21): error: #130: expected a "{"
    建议你去led.h的21行附近看看,那个花括号有什么问题。
    至于那个TIM4_PWM_Init定义重复的问题,是因为你写了两个TIM4_PWM_Init函数,C语言不能有两个同名的函数,不是说你不能使用两个定时器。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月29日

悬赏问题

  • ¥200 关于#matlab#的问题:如图所示的四元二次方程组,想消元消掉A B C D
  • ¥20 小红书和抖音看到很多卖爬虫加矩阵工具,可行吗?
  • ¥15 如何在envi中通过matlab提取树种纹理特征 并利用纹理特征和光谱指数进行树种分类
  • ¥15 圣天诺的。 到期就会有一个60秒的弹窗
  • ¥15 圣天诺的。 到期就会有一个60秒的弹窗。
  • ¥15 Python脚本打包成 .exe的问题
  • ¥15 ipv6路由表显示错误
  • ¥15 python将html转pdf
  • ¥15 C# PrintDocument 80 热敏打印机 , 顶部空间如何缩小
  • ¥15 Win10编码错误导致代码符号出现