S32K144_UART收发的实现

本文章介绍的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
在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值