由于例程给我的IO口是G8,但是我的板子上没有暴露G8引脚,所以需要查看数据手册,重映射一个IO口作为CCP的PWM输出
例: 可见PB10使用AF2重映射到CCP0的通道3上,所以使用PB10
观察自己的GPIO口是否产生PWM波,可以使用示波器,但是示波器买不起,我用的是逻辑分析仪查看当前IO口电平变化情况
以下是呼吸灯代码
#include "system_init.h" #define PWM_Edge_Out (0U)//边沿对齐PWM信号 #define PWM_Center_Out (1U)//中心对齐PWM信号 #define CCP_PWM_WORK (PWM_Edge_Out)// 选择PWM工作模式, 0:边沿对齐PWM信号 1:中心对齐PWM信号 /** * 描述 PWM输出功能初始化参数。 * 输入 : CCPx: 指向CCP或通用定时器内存结构的指针, * 取值CCPx_SFR,x为0/1/2/3/4/18/19 * Channel: CCP_CHANNEL_1: 通道1 * CCP_CHANNEL_2: 通道2 * CCP_CHANNEL_3: 通道3 * CCP_CHANNEL_4: 通道4 * Period: 周期值:32位数 * Duty:占空比:32位数 * * 返回 无。 */ void CCPx_PWM_PPX_Duty(CCP_SFRmap *CCPx, uint32_t Channel, uint16_t Period, uint16_t Duty) { TIM_Reset(CCPx);//定时器外设复位,使能外设时钟 CCP_PWM_Mode_Config(CCPx, Channel, CCP_PWM_MODE);//CCP PWM功能通道模式 CCP_Channel_Output_Control(CCPx, Channel, CCP_CHANNEL_OUTPUT_PWM_ACTIVE);//配置CCP通道输出控制PWM输出,高有效 CCP_Set_Compare_Result(CCPx, Channel, Duty);//PWM占空比 GPTIM_Updata_Immediately_Config(CCPx, TRUE);//立即更新控制 GPTIM_Updata_Enable(CCPx, TRUE);//配置更新使能 GPTIM_Work_Mode_Config(CCPx, GPTIM_TIMER_MODE);//定时模式选择 GPTIM_Set_Counter(CCPx, 0);//定时器计数值 GPTIM_Set_Period(CCPx, Period);//定时器周期值 GPTIM_Set_Prescaler(CCPx, 240);////定时器预分频值 120_000000/240=5_00000HZ #if CCP_PWM_WORK == PWM_Edge_Out GPTIM_Counter_Mode_Config(CCPx, GPTIM_COUNT_UP_OF);//向上计数模式,即边沿对齐PWM信号 #else GPTIM_Counter_Mode_Config(CCPx, GPTIM_COUNT_UP_DOWN_OF);//向上、向下计数模式,即中心对齐PWM信号 #endif GPTIM_Clock_Config(CCPx, GPTIM_SCLK);//选用SCLK时钟 GPTIM_Cmd(CCPx, TRUE);//定时器启动控制使能 } int main() { //初始化 SystemInit(120); systick_delay_init(120); //GPIO口重映射-(映射表参考数据手册) GPIO_Write_Mode_Bits(GPIOB_SFR, GPIO_PIN_MASK_10, GPIO_MODE_RMP); GPIO_Pin_RMP_Config(GPIOB_SFR, GPIO_Pin_Num_10, GPIO_RMP_AF2); //呼吸灯程序 unsigned char i=0; while (1){ for(i=0;i<20;i++){ CCPx_PWM_PPX_Duty(CCP0_SFR, CCP_CHANNEL_3, 1000, 500+i*25);//5_00000/1_000=500HZ systick_delay_ms(100); } for(i=0;i<20;i++){ CCPx_PWM_PPX_Duty(CCP0_SFR, CCP_CHANNEL_3, 1000, 975-i*25);//5_00000/1_000=500HZ systick_delay_ms(100); } } }
标签:GPTIM,KungFu32A156MQT,微芯旺,CCP,CCPx,GPIO,PWM,Config From: https://www.cnblogs.com/LPworld/p/17100544.html