[AT32F421] 请教关于32F421f8p7的PWM是如何设置的?

[复制链接]
326|2
手机看帖
扫描二维码
随时随地手机跟帖
NewSparkPS|  楼主 | 2022-5-8 12:18 | 显示全部楼层 |阅读模式
刚接触421没多少时间,问一下群里的大神们关于421封装是20PIN的芯片是如何设置PWM输出的,我写了一段代码套用了一下没反应
void gpioset(void)
{
GPIO_InitType GPIO_InitStrue;
TMR_OCInitType TMR_OCInitStrue;
TMR_TimerBaseInitType TMR_TimeBaseInitStrue;

RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_TMR3, ENABLE);

GPIO_PinAFConfig(GPIOA, GPIO_PinsSource6, GPIO_AF_1);

GPIO_InitStrue.GPIO_Pins=GPIO_Pins_6;
GPIO_InitStrue.GPIO_MaxSpeed=GPIO_MaxSpeed_50MHz;
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStrue.GPIO_OutType=GPIO_OutType_PP;
GPIO_InitStrue.GPIO_Pull=GPIO_Pull_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStrue);

TMR_TimeBaseInitStrue.TMR_Period=999;  //400Hz
TMR_TimeBaseInitStrue.TMR_DIV=179;
TMR_TimeBaseInitStrue.TMR_CounterMode=TMR_CounterDIR_Up;
TMR_TimeBaseInitStrue.TMR_ClockDivision=TMR_CKD_DIV1;
TMR_TimeBaseInit(TMR1,&TMR_TimeBaseInitStrue);     

TMR_OCInitStrue.TMR_OCMode=TMR_OCMode_PWM2; //增加负脉冲变宽
TMR_OCInitStrue.TMR_OCPolarity=TMR_OCPolarity_High;
TMR_OCInitStrue.TMR_OutputState=TMR_OutputState_Enable;
TMR_OC1Init(TMR3,&TMR_OCInitStrue);
TMR_OC1PreloadConfig(TMR3,TMR_OCPreload_Enable);

TMR_Cmd(TMR3,ENABLE);

...........

下面是调用
int main(void)
{
gpioset();

TMR_SetCompare1(TMR3, 500);
}


先谢过回复的大神

使用特权

评论回复
NewSparkPS|  楼主 | 2022-5-8 12:43 | 显示全部楼层
从贴一下代码,刚才那份写错了是TMR3的应该是TMR1才对

void gpioset(void)
{
GPIO_InitType GPIO_InitStrue;
TMR_OCInitType TMR_OCInitStrue;
TMR_TimerBaseInitType TMR_TimeBaseInitStrue;

RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_TMR1, ENABLE);

GPIO_PinAFConfig(GPIOA, GPIO_PinsSource9, GPIO_AF_1);

GPIO_InitStrue.GPIO_Pins=GPIO_Pins_9;
GPIO_InitStrue.GPIO_MaxSpeed=GPIO_MaxSpeed_50MHz;
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStrue.GPIO_OutType=GPIO_OutType_PP;
GPIO_InitStrue.GPIO_Pull=GPIO_Pull_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStrue);

TMR_TimeBaseInitStrue.TMR_Period=999;  //400Hz
TMR_TimeBaseInitStrue.TMR_DIV=179;
TMR_TimeBaseInitStrue.TMR_CounterMode=TMR_CounterDIR_Up;
TMR_TimeBaseInitStrue.TMR_ClockDivision=TMR_CKD_DIV1;
TMR_TimeBaseInit(TMR1,&TMR_TimeBaseInitStrue);     

TMR_OCInitStrue.TMR_OCMode=TMR_OCMode_PWM2; //增加负脉冲变宽
TMR_OCInitStrue.TMR_OCPolarity=TMR_OCPolarity_High;
TMR_OCInitStrue.TMR_OutputState=TMR_OutputState_Enable;
TMR_OC2Init(TMR1,&TMR_OCInitStrue);
TMR_OC2PreloadConfig(TMR1,TMR_OCPreload_Enable);

TMR_Cmd(TMR3,ENABLE);

...........

下面是调用
int main(void)
{
gpioset();

TMR_SetCompare2(TMR1, 500);
}

从手册上查好像20PIN封装的应该有TMR1吧

使用特权

评论回复
vt2017| | 2022-5-9 19:38 | 显示全部楼层
1、 TMR_OCInitStrue 这个结构体有很多参数没有初始化,你可以调用下TMR_OCStructInit函数初始化一下结构体,建议是所有的结构体参数,就算不用也要初始化(不光是TMR);
2、20pin是有TMR1的,但PA9是和PA11复用的,有可能你引脚配置成了PA11,所以PA9没法使用,配置的寄存器在SYSCFG_CFGR1的 bit4,datasheet里面也有相关说明

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则