听了前面几位的回答,今天重新修改了下程序,发现是自己程序的问题 我使用usart0和usart1 使用的是官方的例子 用的V1.0.4版本。因为有使用发送函数所以TI的清除是没有放在中断里面做的,这样会导致数据发送后程序可能还一直卡在中断里面不会出来,所以我自己增加了一个标志位来判别是否清除了发送中断。usart0 和usart1 都使用的一样的方法。 可能是stm32写多了,可以单独使能发送和接收中断每太注意到这个
bit usart1_ti = 0;
void Send_Data_To_UART1 (UINT8 c)
{
TI_1 = 0;
usart1_ti = 0;
SBUF_1 = c;
while(usart1_ti==0);
}
void Send_Str_To_UART1(UINT8 *str)
{
while(*str != 0) {
Send_Data_To_UART1(*str);
str++;
}
}
void Send_Str_None_To_UART1(UINT8 *str,UINT8 len)
{
while(len > 0) {
Send_Data_To_UART1(*str);
str++;
len--;
}
}
/**
* FUNCTION_PURPOSE: serial interrupt, echo received data.
* FUNCTION_INPUTS: P0.7(RXD) serial input
* FUNCTION_OUTPUTS: P0.6(TXD) serial output
*/
void SerialPort1_ISR(void) interrupt 15
{
if (RI_1==1)
{ /* if reception occur */
clr_RI_1; /* clear reception flag for next reception */
_GPS_USART_IRQHandler(SBUF_1);
}
if(TI_1 ==1) {
clr_TI_1;
usart1_ti = 1;
}
}
|