STM8单片机PWM应用

来源: 作者:2018年02月08日 20:18
关键词:STM8单片机PWM

PD3复用功能是TIM2_CC2,正好可以用来测试PWM功能。本例程通过电位器调整PWM脉宽来调整接在PD3的LED1亮度。

#include

void CLK_init(void)

{

CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M

}

void GPIO_init(void)

{

PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出

PD_CR1 = 0x08; // 设置PD3为推挽输出

}

void TIM2_init(void)

{

TIM2_CCMR2 = 0x70; // PWM模式 2

TIM2_CCER1 = 0x30; // CC2配置为输出

TIM2_ARRH = 0x03;// 配置PWM分辨率为10位,ARR=0x3FF

TIM2_ARRL = 0xFF;// PWM频率=8M/0x03FF=7820Hz

TIM2_CR1 = 0x01; // 计数器使能,开始计数

}

本文引用地址:http://www.eepw.com.cn/article/201611/320481.htm

void ADC_init(void)

{

ADC_CSR = 0x03; // ADC输入引脚AIN3

ADC_CR1 = 0x01; // ADC开启

}

void Run(void)

{

unsigned int value;

ADC_CSR &= ~0x80;//清除EOC转换结束标志

ADC_CR1 |= 0x01; //开始单次转换

while(!(ADC_CSR&0x80)); //等待单次转换完成

value = ((int)ADC_DRH《《2); // 先读高8位,默认设置数据左对齐

value |= ADC_DRL; // 再读低8位

TIM2_CCR2H = (unsigned char)(value》》8); // 更新CC2比较寄存器

TIM2_CCR2L = (unsigned char)(value);

}

void init_devices(void)

{

asm(“sim”);//禁止中断

CLK_init();

GPIO_init();

TIM2_init();

ADC_init();

asm(“rim”); //使能中断

}

void main( void )

{

init_devices();

while(1) Run();

}

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
声明:电子发烧友网转载作品均尽可能注明出处,该作品所有人的一切权利均不因本站而转移。
作者如不同意转载,既请通知本站予以删除或改正。转载的作品可能在标题或内容上或许有所改动。
收藏 人收藏
分享:

相关阅读

发表评论

elecfans网友

分享到:

用户评论(0