OpenEdv-开源电子网

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

我的PWM程序, 用TIM3 的第01路输出, PA6脚, 搞了两天, PA6脚没看到波形,

[复制链接]

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
发表于 2019-5-14 09:01:38 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 LIGONG004 于 2019-5-14 09:03 编辑

#include "stm32f10x.h"
int  main(void)
    {
    TIM3->CCR1=600;             //占空比= 30%
    RCC->APB1ENR |= 1 << 1;     //使能TIM3时钟

    RCC->APB2ENR|=1<<2;         //使能PORTA时钟
    GPIOA->CRL &= 0XF0FFFFFF;   //PA6推挽复用输出
    GPIOA->CRL |= 0X0B000000;   //50MHz
    GPIOA->ODR |= 1 << 6;       //PA6上拉

    TIM3->ARR = 1894;           //设定计数器重装值(PWM频率)  38KHz
    TIM3->PSC = 0;          //预分频器   0=不分频

    TIM3->CCMR1 |= 7 << 4;      //CH1 PWM2模式
    TIM3->CCMR1 |= 1 << 3;      //CH1预装载使能

    TIM3->CCER |= 1 << 0;       //捕获1输出使能

    TIM3->CR1 = 0X0080;     //ARPE设定
    TIM3->CR1 |= 0X01;      //TIM3使能        

    for(;;)  ;
            
    }

我的PWM程序,  用TIM3 的第01路输出, PA6脚,
搞了两天, PA6脚没看到波形,  
PA6脚就是高电平,没有方波,



最佳答案

查看完整内容[请看2#楼]

彻底搞明白啦, 就是开始的这一句 TIM3->CCR1=600; //占空比= 30% 放在最后就好了, 整个正确的程序如下 #include "stm32f10x.h" int main(void) { RCC->APB1ENR |= 1 APB2ENR|=1CRL |= 0X0B000000; //50MHz GPIOA->ODR |= 1 ARR = 1894; //设定计数器重装值(PWM频率) 38KHz TIM3->PSC = 0; //预分频器 0=不分频 TIM3->CCMR1 |= 7 CCMR1 |= 1 CCER |= 1 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
 楼主| 发表于 2019-5-14 09:01:39 | 显示全部楼层
本帖最后由 LIGONG004 于 2019-5-14 15:36 编辑

彻底搞明白啦,
就是开始的这一句
TIM3->CCR1=600;             //占空比= 30%
放在最后就好了,
整个正确的程序如下

#include "stm32f10x.h"
int  main(void)
    {
    RCC->APB1ENR |= 1 << 1;     //使能TIM3时钟

    RCC->APB2ENR|=1<<2;         //使能PORTA时钟
    GPIOA->CRL &= 0XF0FFFFFF;   //PA6推挽复用输出
    GPIOA->CRL |= 0X0B000000;   //50MHz
    GPIOA->ODR |= 1 << 6;       //PA6上拉

    TIM3->ARR = 1894;           //设定计数器重装值(PWM频率)  38KHz
    TIM3->PSC = 0;          //预分频器   0=不分频

    TIM3->CCMR1 |= 7 << 4;      //CH1 PWM2模式
    TIM3->CCMR1 |= 1 << 3;      //CH1预装载使能

    TIM3->CCER |= 1 << 0;       //捕获1输出使能

    TIM3->CR1 = 0X0080;     //ARPE设定
    TIM3->CR1 |= 0X01;      //TIM3使能        

    TIM3->CCR1=600;             //占空比= 30%    (这一句位置不要放在最开始)


    for(;;)  ;
            
    }

一切OK!






回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-5-14 09:53:42 | 显示全部楼层
PA6 是adc引脚还是spi1引脚,看开发板是否挂了spi1外设干扰
回复

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
 楼主| 发表于 2019-5-14 10:23:38 | 显示全部楼层
我自己的PCB   ,不是开发板
STM32F103C8T6

PA6引脚没接任何东西

回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-5-14 10:36:08 | 显示全部楼层
库函数写的可以不 ?
回复

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
 楼主| 发表于 2019-5-14 11:00:06 | 显示全部楼层
我不会库函数,
回复

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
 楼主| 发表于 2019-5-14 11:06:14 | 显示全部楼层
我准备换  TIM1 试试
回复

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
 楼主| 发表于 2019-5-14 15:20:40 | 显示全部楼层
本帖最后由 LIGONG004 于 2019-5-14 15:22 编辑

我操,我算是知道咋回事了,

就是最后一句       for(;;)  ;   
改为   
for(;;)    TIM3->CCR1=600;            //占空比= 30%
整个程序就对了,


示波器里看出PA6引脚有方波输出  周期26uS===38KHz

但我有一点不明白,PWM不是设置好了,自动输出方波么?  
为啥还要总是给 TIM3->CCR1=600; 付值呢   ?   得好好的查查
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-5-14 17:23:09 | 显示全部楼层
TIM3->CCR1=600;             //占空比= 30%
    RCC->APB1ENR |= 1 << 1;     //使能TIM3时钟
还没使能时钟就写CCR1, 能用才奇怪呢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 19:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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