本次学习是串口数据收发的四种方式
中断发送数据
中断接收数据
轮询发送数据
轮询接收数据
主要说一下中断方式的原理和轮询方式的流程
中断方式主要借助下面的函数完成
UART_CallbackRxInstall();
UART_CallbackRxInstall();```
这两个函数分别是注册中断接收和发送的函数,其中有两个参数打一个参数是UART号,第二个是中断函数的名字。对于接收函数必须有一个参数是uint16_t类型的变量,用来传递要发送的数据,对于发送函数,必须有一个参数是uint16_t *类型的变量,来传递要发送的数据。
其他的依据模板
uint32_t instance;
DelayInit();
GPIO_QuickInit(HW_GPIOE,6,kGPIO_Mode_OPP);
//下面是快速初始化方式,不推荐使用
//instance = UART_QuickInit(UART0_RX_PD06_TX_PD07,115200);
UART_InitTypeDef UART_InitStruct1 = {0};
UART_InitStruct1.instance = HW_UART0;
UART_InitStruct1.baudrate = 115200;
UART_InitStruct1.parityMode = kUART_ParityDisabled;
UART_InitStruct1.bitPerChar = kUART_8BitsPerChar;
PORT_PinMuxConfig(HW_GPIOD,6,kPinAlt3);
PORT_PinMuxConfig(HW_GPIOD,7,kPinAlt3);
其他的数据发送和接收操作,则写在中断函数中。对于接收,使用下面的函数
static void UART_RX_ISR(uint16_t byteReceive)
{
UART_WriteByte(HW_UART0,byteReceive);
}
对于发送,则要麻烦一点,但是一般都是使用轮询方式发送。
static void UART_TX_ISR(uint16_t * byteToSend)
{
static const char *p = UART_String1;
*byteToSend = *p++;
if((p - UART_String1) == sizeof(UART_String1))
{
p = UART_String1;
UART_ITDMAConfig(HW_UART0, kUART_IT_Tx, false);
}
}
轮询方式发送数据和接收数据
while(1)
{
if(UART_ReadByte(HW_UART0, &ch) == 0)
UART_WriteByte(instance,ch);
}
接收数据的函数会返回一个值来确认是否接收成功,0表示成功,其他失败
PS:J-link坏了,没有实验效果,很不爽!