程序作用:将接收到的数据再发送到电脑上
问题:程序可以进入接收中断,但无法将接收到的数据返回。(我尝试在中断里加一句发送固定值的语句,可以正常发送)
#ifndef MAIN_H
#define MAIN_H
#include "gd32f30x.h"
/****************USART宏定义*******************/
#define DEBUG_UARTx UART3
#define DEBUG_UARTx_TX_PORT GPIOC
#define DEBUG_UARTx_TX_PIN GPIO_PIN_10
#define DEBUG_UARTx_RX_PORT GPIOC
#define DEBUG_UARTx_RX_PIN GPIO_PIN_11
#define DEBUG_UARTx_BAUDRATE 115200U
#define DEBUG_UARTx_CLK RCU_UART3
#define DEBUG_GPIO_CLK RCU_GPIOC
#define DEBUG_UART_IT_SOURCE UART3_IRQn
/***************函数声明*************************/
void Uart_Init(void);
void Uart_SendByte(uint32_t pUart, uint8_t Data);
void Uart_SendString(uint32_t pUart, char *str);
#endif /* MAIN_H */
/***************************************
函数名称:Uart_SendByte
函数功能:发送一个字节
调用函数:void usart_data_transmit(uint32_t usart_periph, uint32_t data);
FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag);
入口参数:pUatr: USARTx(x=0,1,2)/UARTx(x=3,4)
Data: 要发送的数据
出口参数:无
返回值:无
****************************************/
void Uart_SendByte(uint32_t pUart, uint8_t Data)
{
usart_data_transmit(pUart, Data); // 发送数据
while(usart_flag_get(pUart, USART_FLAG_TBE) == RESET); // 等待发送完成
}
/***************************************
函数名称:Uart_SendString
函数功能:发送字符串
调用函数:void usart_data_transmit(uint32_t usart_periph, uint32_t data);
FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag);
void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag);
入口参数:pUatr: USARTx(x=0,1,2)/UARTx(x=3,4)
str: 要发送的数据
出口参数:无
返回值:无
****************************************/
void Uart_SendString(uint32_t pUart, char *str)
{
unsigned int k;
k = 0;
do
{
Uart_SendByte(pUart, *(str + k) ); // 发送数据
k++;
} while(*(str + k)!='\0');
while(usart_flag_get(pUart, USART_FLAG_TC) == RESET); // 等待发送完成
usart_flag_clear(pUart, USART_FLAG_TC); // 清除标志位
}
void UART3_IRQHandler()
{
uint8_t ucTemp; // 用于存储接收的数据
if (usart_interrupt_flag_get(DEBUG_UARTx, USART_INT_FLAG_RBNE)!= RESET) // 判断是否接收成功
{
usart_interrupt_flag_clear(DEBUG_UARTx, USART_INT_FLAG_RBNE); // 清楚中断位
ucTemp = (uint8_t)usart_data_receive(DEBUG_UARTx); // 读取接收的数据
Uart_SendByte(DEBUG_UARTx, ucTemp); // 发送数据
//Uart_SendByte(DEBUG_UARTx, 0xFF);
}
}
|