请各位大侠帮帮忙,现在用stm8s103f3p6做红外,用的TIM2-CH2 输出PWM 38KHz载波,用UART输出数据,现在接收到的数据不正确,不知道怎么回事,下面是代码。
void pwm38k(void)
{
CLK->CKDIVR=0x00; //fCPU = fMASTER
TIM2->CR1=0x00; // 关闭定时器
TIM2->CCMR2=0x70; // 设置TIM2通道2为PMW2模式,计数器小于比较值为有效电平
TIM2->CCER1=0x32; // 高电平有效,捕获在上升沿
TIM2->PSCR=0x01; //计数器计数频率为16M/2^0=8Mhz,即每0.125us/2计数一次
TIM2->CNTRH=0x00; // 计数初值
TIM2->CNTRL=0xd1;
TIM2->ARRH=0x00; //
TIM2->ARRL=0xd1;
TIM2->CCR2H=0; //比较值,确定占空比
TIM2->CCR2L=21;
TIM2->IER=0x00; //关闭中断
TIM2->CR1=0x01; //开启定时器
}
void Uart_Init(void)
{
UART1_DeInit();
UART1_Init((u32)1200, UART1_WORDLENGTH_8D,UART1_STOPBITS_1,UART1_PARITY_EVEN,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE);
UART1_ITConfig(UART1_IT_RXNE, ENABLE);
UART1_Cmd(ENABLE);
}
int main( void )
{
/* Infinite loop */
/*设置内部时钟16M为主时钟*/
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE);
CLK_HSICmd(ENABLE);
Uart_Init();
pwm38k();
unsigned char c=0x55;
while(1)
{
while(!(UART1->SR&0X80));
UART1_SendData8(c);
// c++;
while(!(UART1->SR&0X40));
} |