OpenEdv-开源电子网

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

STM32F103C8T6为什么通过PB0无法输出PWM

[复制链接]

9

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
933
金钱
933
注册时间
2020-1-6
在线时间
121 小时
发表于 2022-10-10 16:34:37 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 方正波 于 2022-10-10 16:37 编辑

看技术手册可以用TIM3 通道3 直接输出,都不需要复用啊,理论上应该通过示波器可以抓到脉冲啦,但是我测量没有输出。

int main(void)
{
    TIM3_PWM_Init(4999,7199);     //500ms
    while (1)
    {

    }
}


//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{  

    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);    //使能定时器3时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);   


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM3_CH3
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  //复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

   //初始化TIM3
    TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;  
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;  
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High
    TIM_OC3Init(TIM3, &TIM_OCInitStructure);   

    TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  

    TIM_Cmd(TIM3, ENABLE);  

}


Snipaste_2022-10-10_16-35-44.jpg

最佳答案

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

IO口模式配置 用这个看看 GPIO_Mode_AF_PP 用这个TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器 这个加上去看看
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
773
金钱
773
注册时间
2021-4-15
在线时间
304 小时
发表于 2022-10-10 16:34:38 | 显示全部楼层
本帖最后由 日渐秃兀 于 2022-10-10 20:18 编辑

IO口模式配置 用这个看看 GPIO_Mode_AF_PP 用这个TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器  这个加上去看看
日常敲键--头秃一片
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2070
金钱
2070
注册时间
2021-7-17
在线时间
647 小时
发表于 2022-10-10 17:15:51 | 显示全部楼层
一般可以配置定时器的都可以输出PWM的,检测看看是不是程序配置的问题
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4728
金钱
4728
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-10-13 10:45:05 | 显示全部楼层
GPIO没复用
回复

使用道具 举报

2

主题

74

帖子

0

精华

高级会员

Rank: 4

积分
835
金钱
835
注册时间
2019-12-14
在线时间
53 小时
发表于 2022-10-13 21:41:53 | 显示全部楼层
一看就应该是GPIO口没有复用,必须定义为复用模式才可以,否则就是普通的GPIO管脚了!
回复

使用道具 举报

9

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
933
金钱
933
注册时间
2020-1-6
在线时间
121 小时
 楼主| 发表于 2022-10-18 09:12:14 | 显示全部楼层
日渐秃兀 发表于 2022-10-10 20:17
IO口模式配置 用这个看看 GPIO_Mode_AF_PP 用这个TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上 ...

哦 是的是的  可以了
回复

使用道具 举报

9

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
933
金钱
933
注册时间
2020-1-6
在线时间
121 小时
 楼主| 发表于 2022-10-18 09:13:31 | 显示全部楼层
hyhyx1 发表于 2022-10-13 21:41
一看就应该是GPIO口没有复用,必须定义为复用模式才可以,否则就是普通的GPIO管脚了!

哦 懂你的意思了  那这个表格上只有PA6和PA7是可以作为普通GPIO口输出PWM,其它几个就需要复用配置了 是这样嘛
回复

使用道具 举报

2

主题

74

帖子

0

精华

高级会员

Rank: 4

积分
835
金钱
835
注册时间
2019-12-14
在线时间
53 小时
发表于 2022-10-18 17:46:11 | 显示全部楼层
方正波 发表于 2022-10-18 09:13
哦 懂你的意思了  那这个表格上只有PA6和PA7是可以作为普通GPIO口输出PWM,其它几个就需要复用配置了 是 ...

是这个意思...
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 00:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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