【国民技术N32G457评测】四、PWM及呼吸灯测试
[复制链接]
我的相关贴子:
【国民技术N32G457评测】一、资料准备
【国民技术N32G457评测】二、开箱+点灯
【国民技术N32G457评测】三、ADC及串口功能测试
PWM初始化代码
LED3以100HZ频率闪烁,亮暗逐渐变化,产生呼吸效果。
void PwmInit(void) //PWM定时器初始化
{
//开启T1时钟 + AFIO
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_TIM1|RCC_APB2_PERIPH_AFIO,ENABLE);
//GPIO引脚复用
//PA8/TIM1_CH1/LED1
GPIO_InitType gpio;
gpio.Pin=GPIO_PIN_8;
gpio.GPIO_Mode=GPIO_Mode_AF_PP;
gpio.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitPeripheral(GPIOA,&gpio);
//tim1部分引脚映射
GPIO_ConfigPinRemap(GPIO_PART1_RMP_TIM1,ENABLE);
//tim1定时器相关
//144M/14400=10KHZ / 10000 =1HZ
// /100=100hz
TIM_TimeBaseInitType tim_base;
tim_base.Prescaler = 14400;
tim_base.CntMode = TIM_CNT_MODE_UP;
tim_base.Period = 100;
tim_base.ClkDiv = 0;//TIM_CLK_DIV4;
tim_base.RepetCnt = 0;
TIM_InitTimeBase(TIM1, &tim_base);
OCInitType tim;
tim.OcMode = TIM_OCMODE_PWM1;
tim.OutputState = TIM_OUTPUT_STATE_ENABLE;
tim.OutputNState = TIM_OUTPUT_NSTATE_ENABLE;
tim.Pulse = 5000; //占空比
tim.OcPolarity = TIM_OC_POLARITY_LOW;
tim.OcNPolarity = TIM_OCN_POLARITY_HIGH;
tim.OcIdleState = TIM_OC_IDLE_STATE_SET;
tim.OcNIdleState = TIM_OC_IDLE_STATE_RESET;
TIM_InitOc1(TIM1,&tim);
TIM_Enable(TIM1,ENABLE);
TIM_EnableCtrlPwmOutputs(TIM1,ENABLE);
}
主运行代码,10mS调用一次此函数,1秒循环一次
void Task2(void){ //呼吸灯 10ms
static uint16_t count=0;
static int dir=0;
TIM_SetCmp1(TIM1,count);
if(dir==0){
count++;
if(count>100){
dir=!dir;
}
}else{
count--;
if(count>65000){
count=0;
dir=!dir;
}
}
}
相关引用文件
#include "n32g45x.h"
#include "n32g45x_gpio.h"
#include "bsp.h"
#include <n32g45x_tim.h>
申明:我的相关贴子均为我原创,手工敲出来的,不是拿个DEMO下载运行一下就完事。
视频效果:
二楼上传
|