PD3復(fù)用功能是TIM2_CC2,正好可以用來測試PWM功能。本例程通過電位器調(diào)整PWM脈寬來調(diào)整接在PD3的LED1亮度。#include
void CLK_init(void)
{
CLK_CKDIVR = 0x08; // 16M內(nèi)部RC經(jīng)2分頻后系統(tǒng)時鐘為8M
}
void GPIO_init(void)
{
PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3輸出
PD_CR1 = 0x08; // 設(shè)置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; // 計數(shù)器使能,開始計數(shù)
}
本文引用地址:http://m.butianyuan.cn/article/201611/320481.htmvoid ADC_init(void)
{
ADC_CSR = 0x03; // ADC輸入引腳AIN3
ADC_CR1 = 0x01; // ADC開啟
}
void Run(void)
{
unsigned int value;
ADC_CSR &= ~0x80;//清除EOC轉(zhuǎn)換結(jié)束標志
ADC_CR1 |= 0x01; //開始單次轉(zhuǎn)換
while(!(ADC_CSR&0x80)); //等待單次轉(zhuǎn)換完成
value = ((int)ADC_DRH<<2); // 先讀高8位,默認設(shè)置數(shù)據(jù)左對齊
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();
}
評論