286_S32K144串口接收功能

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

继续S32K144的学习,这一次尝试看看串口的接收功能。关于串口的使用,我一直用的非常少。可能是因为工作的行业原因,我接触到的更多的是CAN,而且CAN的实际使用也不是很多。

前面,为了实现一个printf,使用了串口的打印功能。这一次,尝试做一下这个接收功能的实现。

串口的配置,还是跟之前一样,比较简单。使用的波特率还是115200,这部分没有关于接收的特殊配置。看起来可以直接使用接收功能。

找到了这样的一个接口,做一个测试代码设计如下:

我把上面的这个函数,在1ms的任务中调度。

之后,做一下运行测试。

已经有数据接收到了,但是我发送的是hello,接收的时候出现了错误。再次测试hello以及12345两个发送。

第二次,接收正确。

第三次,接收正确。

连续两次测试,看得出似乎输入速度快的时候会出现一点问题。不过,大致的一个接收功能,我们已经看到了。相应的问题,后面看看继续寻找改进方案。

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

### 关于S32K144 UART 接收实现与配置 对于S32K144微控制器而言,在设置UART接收功能之前,需先初始化相应的外设模块。这通常涉及到使能时钟源以及设定波特率等参数[^1]。 #### 初始化UART接口 为了启动UART通信并准备其用于数据接收,下面展示了一个简单的初始化函数: ```c void UART_Init(void){ // Enable clock to PORTA and UART0 modules. CLOCK_EnableClock(kCLOCK_PortA); CLOCK_EnableClock(kCLOCK_Uart0); // Configure the pinmux for UART0_RX (PTA1) and UART0_TX (PTA2). PORT_SetPinMux(PORT, 1U, kPORT_MuxAlt3); PORT_SetPinMux(PORT, 2U, kPORT_MuxAlt3); uart_config_t config; // Get default settings of UART. UART_GetDefaultConfig(&config); // Set baud rate as required by application needs. config.baudRate_Bps = 9600; // Initialize UART with given parameters. UART_Init(UART0, &config, SystemCoreClock); } ``` 此代码片段展示了如何通过调用`UART_GetDefaultConfig()`获取默认配置结构体,并调整其中的属性来满足特定需求,比如这里设置了每秒传输位数(baud rate)。最后一步则是利用这些定制化的选项完成实际硬件资源的初始化工作。 #### 配置中断服务程序以处理接收到的数据包 当希望实时响应来自外部设备的消息时,则可以考虑采用基于中断的方式来进行消息监听。为此目的而编写的一个典型ISR如下所示: ```c void UART0_IRQHandler(void){ uint8_t receivedData; if ((kUART_RxDataRegFullFlag)&UART_GetStatusFlags(UART0)){ // Read data from receive buffer register. receivedData=UART_ReadByte(UART0); // Process incoming byte here... } // Clear interrupt flag after processing event. UART_ClearStatusFlags(UART0,kUART_RxDataRegFullFlag); } ``` 上述例子中定义了一种方法用来读取由UART端口传入的新字符,并对其进行适当处置;同时确保每次操作完成后清除对应的标志位以便下一次触发正常运作。 #### 注册中断向量表项指向自定义的服务例程地址 为了让处理器知道发生指定类型的事件之后应该跳转到哪里执行相应动作,还需要把上面创建好的IRQ Handler同具体的物理位置关联起来。这部分可以通过修改NVIC中的优先级寄存器或者直接编辑startup文件里的弱符号链接达成目标。 ```c // In startup_S32K144.s or similar assembly file, // Override weak symbol definition provided by CMSIS-Core package. .globals g_pfnVectors .section .isr_vector,"a",%progbits g_pfnVectors: ... .word UART0_IRQHandler /* UART0 RX/TX */ ... ``` 综上所述,针对S32K144系列MCU实施串行输入流控制主要涉及三个方面的内容:一是对外围组件做必要的预处理;二是设计合理的异常捕捉机制;三是建立有效的信号传递路径让两者之间能够顺畅交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值