/******************************************************************************* // 功能:PWM 信号 输出测试 *******************************************************************************/ /*******************************************************************************/ // 头文件 宏定义 #include <iostm8s003f3.h> #include"stdio.h" /*******************************************************************************/ // 常用数据类型定义 #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned int uint16_t; typedef unsigned long uint32_t; /*******************************************************************************/ // 函数声明; void CLK_Init(void); void TIM_Init(void); /******************************************************************************* * 函数名称:DelayMS(unsigned int ms) * 功能描述:延时函数 * 输入参数:ms -- 要延时的毫秒数,这里假设CPU 的主频为2MHZ * 输出参数:无 * 返回值: 无 * 备注: 无 ********************************************************************************/ void DelayMS(unsigned int ms) { unsigned char i; while(ms != 0) { for(i=0; i<250; i++); for(i=0; i<75; i++); ms--; } } /******************************************************************************* * 函数名称:CLK_Init() * 功能描述:初始化时钟 * 输入参数:无 * 输出参数:无 * 返回值: 无 * 备注: 无 ********************************************************************************/ void CLK_Init() { CLK_CKDIVR = 0x11; // 10: fHSI = fHSI RC output/ 4 // = 16MHZ / 4 =4MHZ // 001: fCPU=fMASTER/2. = 2MHZ } /******************************************************************************* * 函数名称:TIM_Init() * 功能描述:初始化定时器2 的通道2,用于控制LED 的亮度 * 输入参数:无 * 输出参数:无 * 返回值: 无 * 备注: 无 ********************************************************************************/ void TIM_Init() { TIM2_CCMR2 = TIM2_CCMR2 | 0x70; // Output mode PWM2. 0111 0000 // 通道2 被设置成比较输出方式 // OC2M = 111,为PWM 模式2, // 向上计数时,若计数器小于比较值,为无效电平 // 即当计数器在0 到比较值时,输出为1,否则为0 TIM2_CCER1 = TIM2_CCER1 | 0x30;// CC polarity low,enable PWM output */ // CC2P = 1,低电平为有效电平 // CC2E = 1,开启输出引脚 //初始化自动装载寄存器,决定PWM 方波的频率,Fpwm=4000000/256=15625HZ TIM2_ARRH = 0; TIM2_ARRL = 0xFF; //初始化比较寄存器,决定PWM 方波的占空比 TIM2_CCR2H = 0; TIM2_CCR2L = 0; // 初始化时钟 分频器为1,即计数器的时钟频率为 Fmaster = 4MHZ TIM2_PSCR = 0; // 启动计数 TIM2_CR1 = TIM2_CR1 | 0x01; } /******************************************************************************* * 函数名称:main() * 功能描述:主函数; * 输入参数:无 * 输出参数:无 * 返回值: 无 * 备注: 无 ********************************************************************************/ main() { unsigned char i; CLK_Init(); // 初始化时钟 TIM_Init(); // 初始化定时器 while(1) // 进入无限循环 { // 下面的循环将占空比逐渐从0 递增到50% for(i=0; i<128; i++) { TIM2_CCR2H = 0; TIM2_CCR2L = i; DelayMS(5); } // 下面的循环将占空比逐渐从50%递减到0 for(i=128; i>0; i--) { TIM2_CCR2H = 0; TIM2_CCR2L = i; DelayMS(5); } } }
联系人:客服在线
手机:全工:13903011251
电话:李R:13530006400
邮箱:729986191@qq.com
地址: GUANGDONG PROVINCE