|
#include "IOSTM8S103F3.h"
unsigned int FRE=200; //frequency 頻率 4M / 100 = 40K
void PWM_GPIO_Init( void )
{
PC_DDR |= ( 1 << 7 ); //PC7 推挽輸出
PC_CR1 |= ( 1 << 7 );
}
void TIM1_Init( void )
{
PWM_GPIO_Init();
TIM1_CR1 = ( 1 << 7 ); //自動預(yù)裝載允許
TIM1_CCMR2 = ( 6 << 4 ) | ( 1 << 3 ) | ( 1 << 2 ); //TIM1 CH2 PWM1 輸出比較1預(yù)裝載使能 輸出比較1 快速使能
TIM1_CCER1 |= 0x10; //CC2為輸出 高電平有效
TIM1_PSCRH = 0x00; //預(yù)分頻 0
TIM1_PSCRL = 0x03; //16M/(1+3)=4 M
TIM1_ARRH = FRE >> 8; //設(shè)定自動重裝載值高8位
TIM1_ARRL = FRE; //設(shè)置自動重裝載值低8位
TIM1_BKR = 0x80; //剎車寄存器 使能OC1輸出 定時器不工作時輸出無效電平
TIM1_EGR = ( 1 << 0 ); //產(chǎn)生更新事件
TIM1_CR1 |= 0x01; //使能計數(shù)器
}
//TIM1 CH2 PC7
void TIM1_CH2_FRE_DC_Change( unsigned int freq, unsigned int dc )
{
TIM1_ARRH = freq >> 8; //設(shè)置頻率
TIM1_ARRL = freq;
TIM1_CCR2H = dc >> 8;
TIM1_CCR2L = dc;
}
void SysClkInit( void )
{
CLK_SWR = 0xe1; //HSI為主時鐘源 16MHz CPU時鐘頻率
CLK_CKDIVR = 0x00; //CPU時鐘0分頻,系統(tǒng)時鐘0分頻
}
void main( void )
{
unsigned int i = 100;
SysClkInit();
__asm( "sim" );
TIM1_Init();
__asm( "rim" );
while( 1 )
{
for( i = 100; i < 2000; i++ )
{
TIM1_CH2_FRE_DC_Change( i, i / 2 );
}
}
}
|
評分
-
查看全部評分
|