[mw_shl_code=c,true]void Uart_Init( u32 Baud )
{
float temp = 0;
u16 Baud_H = 0;
u16 Baud_L = 0;
temp = (float)72000000/( Baud*16 );
Baud_H = temp;
Baud_L = ( temp - Baud_H )*16;
Baud_H <<= 4;
Baud_H += Baud_L;
RCC->APB2ENR |= 1<<2; /* ????A???±?? PA9 PA10 */
RCC->APB2ENR |= 1<<14; /* ?????®??1?±?? */
GPIOA->CRH &= 0XFFFFF00F; /* ?è??IO?????? 9.10 */
GPIOA->CRH |= 0X000008B0;
RCC->APB2RSTR |= 1<<14; /* ?????®??1 */
RCC->APB2RSTR &= ~(1<<14);
USART1->BRR = Baud_H; /* ?è???¨???? */
USART1->CR1 |= 0X200C;
/* ???????? ?ò?????? */
USART1->CR1 |= 1<<8;
USART1->CR1 |= 1<<5;
NVIC_Init( 3, 3, USART1_IRQn,2 ); /* USART1_IRQn ?? USART1_IRQChannel */
}
void USART1_IRQHandler( void )
{
u8 Res = 0;
if( USART1->SR & (1<<5) )
{
Res = USART1->DR;
if( (USART1_RX_STA & 0X8000)== 0 ) /* ????????????????????·??á?? */
{
if( USART1_RX_STA & 0X4000 ) /* ??????????????·??????????°°??? */
{
if( Res != 0x0a ) /* ????±?????????·??????????ó°??? */
{
USART1_RX_STA = 0;
}
else
{
USART1_RX_STA |= 0X8000;
}
}
else
{
if( Res == 0x0d )
{
USART1_RX_STA |= 0X4000;
}
else
{
USART1_RX_BUF[USART1_RX_STA&0X3FFF]=Res;
USART1_RX_STA++;
if( USART1_RX_STA>(USART1_RX_LEN-1))
{
USART1_RX_STA = 0;
}
}
}
}
}
}
[/mw_shl_code]
无法进入中断 求教
|