听了前面几位的回答,今天重新修改了下程序,发现是自己程序的问题 我使用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;
- }
- }
|