最近在配置串口(stm32f031),出现一个问题,就是初始化串口中,使能发送接收中断(并没有任何的外部数据传输),就立即进入发送中断,而且一直不出中断。 原子哥,帮托帮忙看一下,谢谢:)
void send(void)
{
USART1->TDR=res;
while((USART1->ISR&0X40)==0);
}
void USART1_IRQHandler(void)
{
if(USART1->ISR&(1<<5))
{
res=USART1->RDR;
}
}
voidUsart1_Init(uint32_t pclk, uint32_t bound)
{
float temp;
uint16_t mantissa;
uint16_t fraction;
temp=(float)(pclk*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //ingeter part
fraction=(temp-mantissa)*16; //decimal part
mantissa<<=4;
mantissa+=fraction;
RCC->AHBENR|=1<<17; //enable GPIOA clock
RCC->APB2ENR|=1<<14; //enable usart1 clock
GPIOA->MODER&=0XFFC3FFFF;//PA9usart1_Tx/ PA10 usart1_Rx
GPIOA->MODER|=0X000800000;//MODER9 =10
GPIOA->OTYPER&=~(1<<9);
GPIOA->OTYPER&=~(1<<10);
GPIOA->PUPDR&=0XFFC0FFFF;
RCC->APB2RSTR|=(1<<14); //reset usart1
RCC->APB2RSTR&=~(1<<14);// stop to reset usart1
//USART1->CR1|=1<<15; //oversampling by 8
//波特率设置
USART1->BRR=mantissa; //
USART1->CR1|=0X0D; //
NVIC_SetPriority(USART1_IRQn,2u);
NVIC_EnableIRQ(USART1_IRQn);
USART1->CR1|=1<<5; //receive interrupt enable
USART1->CR1|=1<<7; //transfer interrupt enable
}
|