汇集网友智慧,解决技术难题
PWM输出 stm32f103c8t6 PA PA0 最小系统 控制
赞0
评论
2025-02-10
yycaisl 发表于 2025-2-8 17:29 硬件肯定没问题
2025-02-09
天意无罪 发表于 2025-2-8 09:09 如果在实验板上都是正常的话,那就要检查一下你的硬件了,打一下PA2通断,焊接是否有问题,或者MCU有问题等 ...
2025-02-08
jobszheng 发表于 2025-2-8 09:26 人家的软件配置可以正常输出PWM波,而自己写的不能。 我觉得是你的代码写得的问题。
xionghaoyun 发表于 2025-2-8 16:05 先看看PA2脚有没有坏 delay翻转I/O口
点击图片添加到编辑器内容中
点击文件名将附件添加到文章中
提交
tyw
315个答案
天意无罪
287个答案
xch
208个答案
jjjyufan
199个答案
coody
189个答案
LcwSwust
158个答案
chunyang
135个答案
tpgf
111个答案
赞0
// 初始化PA2为PWM输出
void PWM_Init(void)
{
// 1. 使能GPIOA和TIM2时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能TIM2时钟
// 2. 配置PA2为复用推挽输出模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; // 只配置PA2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 3. 配置TIM2为内部时钟模式
TIM_InternalClockConfig(TIM2);
// 4. 配置定时器基本参数
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频:不分频
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseInitStructure.TIM_Period = 2000 - 1; // 自动重装载值,决定PWM周期
TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; // 预分频值,决定定时器时钟频率
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; // 重复计数器
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
// 5. 配置TIM2通道2(PA2)为PWM输出
TIM_OCInitTypeDef TIM_OCInitTypeDefStructure2;
TIM_OCStructInit(&TIM_OCInitTypeDefStructure2);
TIM_OCInitTypeDefStructure2.TIM_OCMode = TIM_OCMode_PWM1; // PWM模式1
TIM_OCInitTypeDefStructure2.TIM_OCPolarity = TIM_OCPolarity_High; // 高电平有效
TIM_OCInitTypeDefStructure2.TIM_OutputState = TIM_OutputState_Enable; // 使能输出
TIM_OCInitTypeDefStructure2.TIM_Pulse = 1000; // 设置占空比为50%(1000/2000)
TIM_OC2Init(TIM2, &TIM_OCInitTypeDefStructure2);
// 6. 使能TIM2
TIM_Cmd(TIM2, ENABLE);
}
int main(void)
{
// 初始化PWM
PWM_Init();
// 主循环
while (1)
{
// 这里可以添加其他代码
}
}
评论
2025-02-10
赞0
评论
2025-02-10
赞0
评论
2025-02-10
赞0
你说软件在实验板上运行就是正常的,那说明软件配置至少也没有问题,如果硬件也没有问题,那就奇葩了。
评论
2025-02-09
赞0
评论
2025-02-09
赞0
硬件肯定没问题
评论
2025-02-08
赞0
#include "stm32f10x.h" // Device header
void PWM_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_InternalClockConfig(TIM2);
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 2000-1;
TIM_TimeBaseInitStructure.TIM_Prescaler = 720-1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
TIM_OCInitTypeDef TIM_OCInitTypeDefStructure1;
TIM_OCStructInit(&TIM_OCInitTypeDefStructure1);
TIM_OCInitTypeDefStructure1.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitTypeDefStructure1.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitTypeDefStructure1.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitTypeDefStructure1.TIM_Pulse = 0;
TIM_OC1Init(TIM2,&TIM_OCInitTypeDefStructure1);
TIM_OCInitTypeDef TIM_OCInitTypeDefStructure2;
TIM_OCStructInit(&TIM_OCInitTypeDefStructure2);
TIM_OCInitTypeDefStructure2.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitTypeDefStructure2.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitTypeDefStructure2.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitTypeDefStructure2.TIM_Pulse = 0;
TIM_OC2Init(TIM2,&TIM_OCInitTypeDefStructure2);
TIM_OCInitTypeDef TIM_OCInitTypeDefStructure3;
TIM_OCStructInit(&TIM_OCInitTypeDefStructure3);
TIM_OCInitTypeDefStructure3.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitTypeDefStructure3.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitTypeDefStructure3.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitTypeDefStructure3.TIM_Pulse = 0;
TIM_OC3Init(TIM2,&TIM_OCInitTypeDefStructure3);
TIM_OCInitTypeDef TIM_OCInitTypeDefStructure4;
TIM_OCStructInit(&TIM_OCInitTypeDefStructure4);
TIM_OCInitTypeDefStructure4.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitTypeDefStructure4.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitTypeDefStructure4.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitTypeDefStructure4.TIM_Pulse = 0;
TIM_OC4Init(TIM2,&TIM_OCInitTypeDefStructure4);
TIM_Cmd(TIM2,ENABLE);
}
请指点一下
评论
2025-02-08
赞0
试验程序能在PA2口输出高/低电平(LED亮/灭)
评论
2025-02-08
赞0
评论
2025-02-08
您需要登录后才可以回复 登录 | 注册