本文章介绍的UART,根据实际应用,一发一收的原则,介绍一种模拟收发的方式。
比如按下按键1,发出读传感器1指令,传感器会回复数据,回复数据后再对数据进行解析,按下按键2,发出读传感器2指令。。。。。
引脚配置
使用LPUART2,映射到PTA8 与 PTA9。
为了模拟实际的收发,Port12 与 Port13为按键的配置,
外设配置
Name后续代码生成中的,会有lpuart_2_InitConfig0结构体,结构体中则是包含以下的配置信息
Read_only表示生成的结构体信息是否为只读,为const修饰
Transfer Type表示传输方式,此处选用中断传输
Baudrate表示通信波特率,此处选择9600
Parity Mode表示校验位是否开启,此处不使能。
Stop bis表示停止位,此处选择1
Bits per_char表示数据位,此处选择8
代码部分
#include "sdk_project_config.h"
unsigned char txbuffer[5] = {1,2,3,4,5};
unsigned char rxdata5[5]={0};
unsigned char rxdata3[5]={0};
void UART2_RX_IQR_CALLBACK(void *driverState, uart_event_t event, void *userData)
{
(void)driverState;
(void)userData;
if(event == UART_EVENT_RX_FULL) //收集到5个数据,会进入该中断函数
{
}
}
int main(void)
{
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);
LPUART_DRV_Init(2 , &lpUartState2 , &lpuart_2_InitConfig0); //LUART2 初始化
LPUART_DRV_InstallRxCallback(2,&UART2_RX_IQR_CALLBACK,NULL); //配置中断回调函数
while(1)
{
if(PTC->PDIR >> 12 & 0X01) // KEY1 按键按下
{
while(PTC->PDIR >> 12 & 0X01); //等待按键释放 无需消抖
LPUART_DRV_SendDataBlocking(2,&txbuffer[0],5,10); //发送读取传感器1指令
LPUART_DRV_ReceiveData(2,&rxdata5[0],5); //假定传感器回复5个字节数据,则配置接收5字节数据,并存在rxdata5数组中
}
if(PTC->PDIR >> 13 & 0X01) // KEY2 按键按下
{
while(PTC->PDIR >> 13 & 0X01); //等待按键释放 无需消抖
LPUART_DRV_SendDataBlocking(2,&txbuffer[0],3,10); //发送读取传感器1指令
LPUART_DRV_ReceiveData(2,&rxdata3[0],3); //假定传感器回复3个字节数据,则配置接收3字节数据,并存在rxdata3数组中
}
/**
* 此处可以根据实际解析读回的数据 此处可以根据实际解析读回的数据
* 此处可以根据实际解析读回的数据 此处可以根据实际解析读回的数据
* 此处可以根据实际解析读回的数据 此处可以根据实际解析读回的数据
* 此处可以根据实际解析读回的数据 此处可以根据实际解析读回的数据
* 此处可以根据实际解析读回的数据 此处可以根据实际解析读回的数据
* 此处可以根据实际解析读回的数据 此处可以根据实际解析读回的数据
*/
}
}
LPUART_DRV_SendDataBlocking为发送数据的函数,传入UART通道,发送的数据的饿数组指针,以及发送的数据长度以及延时
LPUART_DRV_ReceiveData为配置接收的函数,传入UART通道,接收数据的数组,以及接收的数据长度
实现效果
按下按键1,发送读取指令(随便取的)01,02,03,04,05
如图所示为板子发出的数据
然后通过串口发送,11,22,33,44,55模拟回复的数据
通过实时调试界面观察,可以看到回来的数据,此处为10进制数显示
同理,按下按键2,发送读取指令(随便取的)01,02,03
如图所示为板子发出的数据
再通过串口工具回复数据 99,88,77
如图所示为回复的数据,与预期符合
数据解码,闲置高电平,低电平为起始信号,随后开启数据传输,数据为01 02 03