OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4048|回复: 7

STM32F103RCT6 PWM程序源码

[复制链接]

7

主题

18

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2020-7-18
在线时间
8 小时
发表于 2020-10-21 09:44:43 | 显示全部楼层 |阅读模式
1金钱
精英版STM32F103ZET6的 PWM程序源码下载到STM32F103RCT6后,没有输出呢,求STM32F103RCT6 PWM程序源码
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2020-10-21
在线时间
5 小时
发表于 2020-10-21 09:44:44 | 显示全部楼层
本帖最后由 liuendong 于 2020-10-21 11:49 编辑
  1. /*---------------main.c-----------------*/
  2. //截取我的项目里面的部分代码,头文件自己建  楼上代码加了中断,中断在这里不需要,删掉了
  3. int main(void)
  4. {
  5.     //pwm波形 可用示波器测量
  6.     TIM3_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
  7.     TIM3_PWM_Init();
  8.    
  9.     while(1)
  10.     {

  11.     }
  12. }


  13. /*---------------tim.c-----------------*/
  14. // TIM3-CH2  
  15. //注意是全映射还是部分映射  GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);   在PA7上使用TIM3需要全映射
  16. void TIM3_Init(u16 arr,u16 psc)  
  17. {
  18.         
  19.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  20.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  21.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
  22.         GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
  23.         
  24.         //初始化TIM3
  25.         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  26.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  27.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  28.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  29.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
  30. }


  31. /*---------------pwm.c-----------------*/
  32. /*
  33. PA.7
  34. */
  35. //PWM输出初始化
  36. //arr:自动重装值
  37. //psc:时钟预分频数
  38. void TIM3_PWM_Init()
  39. {  
  40.         GPIO_InitTypeDef GPIO_InitStructure;
  41.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  42.         
  43.     //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形        GPIOB.5
  44.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2
  45.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
  46.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  47.         GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
  48.         
  49.         //初始化TIM3 Channel2 PWM模式         
  50.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  51.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  52.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  53.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2
  54.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
  55.         TIM_Cmd(TIM3, ENABLE);  //使能TIM3
  56.         
  57.         TIM_SetCompare2(TIM3,450);   //输出pwm  占空比 = 450/arr
  58.         
  59. }
复制代码
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14433
金钱
14433
注册时间
2018-8-3
在线时间
1157 小时
发表于 2020-10-21 11:07:04 | 显示全部楼层
下载MINI 的A盘资料发板资料A盘: https://pan.baidu.com/s/1A_AeqtVpJonr7-QWCayEdw 提取码:7ljr
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2020-10-21
在线时间
5 小时
发表于 2020-10-21 11:42:46 | 显示全部楼层
  1. /*---------------main.c-----------------*/
  2. //截取我的项目里面的部分代码,头文件自己建
  3. int main(void)
  4. {
  5.     //pwm波形 可用示波器测量
  6.     TIM3_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
  7.     TIM3_PWM_Init();
  8.    
  9.     while(1)
  10.     {

  11.     }
  12. }


  13. /*---------------tim.c-----------------*/
  14. // TIM3-CH2  
  15. //注意是全映射还是部分映射  GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);   在PA7上使用TIM3需要全映射
  16. void TIM3_Init(u16 arr,u16 psc)  
  17. {
  18.        
  19.         NVIC_InitTypeDef NVIC_InitStructure;
  20.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  21.        
  22.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  23.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
  24.         GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
  25.        
  26.        
  27.         //初始化TIM3
  28.         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  29.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  30.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  31.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  32.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
  33.        
  34.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  35.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn ;               
  36.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;       
  37.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;       
  38.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  39.         NVIC_Init(&NVIC_InitStructure);               
  40.         TIM_Cmd(TIM3, ENABLE);

  41. }


  42. /*---------------pwm.c-----------------*/
  43. /*
  44. PA.7
  45. */
  46. //PWM输出初始化
  47. //arr:自动重装值
  48. //psc:时钟预分频数
  49. void TIM3_PWM_Init()
  50. {  
  51.         GPIO_InitTypeDef GPIO_InitStructure;
  52.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  53.        
  54.     //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形        GPIOB.5
  55.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2
  56.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
  57.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  58.         GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
  59.        
  60.         //初始化TIM3 Channel2 PWM模式         
  61.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  62.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  63.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  64.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2
  65.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
  66.         TIM_Cmd(TIM3, ENABLE);  //使能TIM3
  67.        
  68.         TIM_SetCompare2(TIM3,450);   //输出pwm  占空比 = 450/arr
  69.        
  70. }
复制代码
回复

使用道具 举报

4

主题

98

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3900
金钱
3900
注册时间
2018-5-25
在线时间
902 小时
发表于 2020-10-21 15:04:47 | 显示全部楼层
1、注意一下有的定时器需要使能PWM输出,有这个库函数,类似函数——TIM_CtrlPWMOutputs(TIM1, ENABLE);
2、定时器结构体使用前,记得先初始化下,例如函数——TIM_OCStructInit(&TIM_OCInitStructure);
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-10-21 19:47:19 | 显示全部楼层
看看是不是有不兼容的管脚
回复

使用道具 举报

7

主题

18

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2020-7-18
在线时间
8 小时
 楼主| 发表于 2020-10-23 11:27:12 | 显示全部楼层
翼行园子 发表于 2020-10-21 11:07
下载MINI 的A盘资料发板资料A盘: https://pan.baidu.com/s/1A_AeqtVpJonr7-QWCayEdw 提取码:7ljr

谢谢    谢谢    好的
回复

使用道具 举报

7

主题

18

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2020-7-18
在线时间
8 小时
 楼主| 发表于 2020-10-26 10:23:25 | 显示全部楼层

非常感谢,已经解决
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 22:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表