
/*******************************************************************************
// 功能: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