当前位置: 首页 > news >正文

HC32L190 串口驱动

一、HC串口0 驱动

字节中断接收数据
!!!没有无校验的方式!!!
!!!串口工具不要勾选发送新行,接收数据会覆盖原有数据!!!

二、代码实现

hd_uart0.c

#include "hd_uart0.h"
#include "hd_gpio.h"
#include <stdio.h>extern uint8_t u8RxBuf[10];
extern uint8_t Rx_flag;
extern uint8_t inx;/*
普通模式下使用偶校验,波特率115200。
字节中断接收数据
!!!没有无校验的方式!!!
!!!串口工具不要勾选发送新行,接收数据会覆盖原有数据!!!
*/// 串口0中断处理函数
void Uart0_IRQHandler(void)
{if (Uart_GetStatus(M0P_UART0, UartRC)) {Uart_ClrStatus(M0P_UART0, UartRC);uint8_t data = Uart_ReceiveData(M0P_UART0);if (inx < 10) {u8RxBuf[inx++] = data;  // 存入数据并递增索引}// 当接收满10字节后触发标志if (inx == 10) {Rx_flag = 1;    // 通知主任务inx = 0;        // 重置索引}}
}en_result_t Hd_uart0_init(void)//串口0初始化函数
{en_result_t Res;stc_uart_cfg_t stcCfg;stc_gpio_cfg_t stcGpioCfg;DDL_ZERO_STRUCT(stcCfg);DDL_ZERO_STRUCT(stcGpioCfg);Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0, TRUE);// TX 配置stcGpioCfg.enDir = GpioDirOut;Gpio_Init(UART0_TX_PORT, UART0_TX_PIN, &stcGpioCfg);Gpio_SetAfMode(UART0_TX_PORT, UART0_TX_PIN, UART0_TX_AF);// RX 配置stcGpioCfg.enDir = GpioDirIn;Gpio_Init(UART0_RX_PORT, UART0_RX_PIN, &stcGpioCfg);Gpio_SetAfMode(UART0_RX_PORT, UART0_RX_PIN, UART0_RX_AF);// UART 配置stcCfg.enRunMode        = UartMskMode3;stcCfg.enStopBit        = UartMsk1bit;stcCfg.enMmdorCk        = UartMskEven;//普通模式使用偶校验stcCfg.stcBaud.u32Baud  = BAUDRATE;stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;stcCfg.stcBaud.u32Pclk  = Sysctrl_GetPClkFreq();Res = Uart_Init(M0P_UART0, &stcCfg);if (Res != Ok) {return Res;}///<UART中断使能Uart_ClrStatus(M0P_UART0,UartRC);                ///<清接收请求Uart_EnableIrq(M0P_UART0,UartRxIrq);             ///<使能串口接收中断EnableNvic(UART0_IRQ, IrqLevel3, TRUE);          ///<系统中断使能return Ok;
}void Hd_uart0_send_byte(uint8_t data)//字节发送函数
{M0P_UART0->SBUF = data;while (Uart_GetStatus(M0P_UART0, UartTC) == FALSE);Uart_ClrStatus(M0P_UART0, UartTC);
}void Hd_uart0_send_string(const char* str)//字符串发送函数
{while (*str){Hd_uart0_send_byte((uint8_t)(*str));str++;}
}

hd_uart0.h

#ifndef HD_UART0_H
#define HD_UART0_H#include "ddl.h"
#include "uart.h"
#include "gpio.h"#define UART0_RX_PORT    GpioPortA
#define UART0_RX_PIN     GpioPin10
#define UART0_RX_AF      GpioAf1#define UART0_TX_PORT    GpioPortA
#define UART0_TX_PIN     GpioPin9
#define UART0_TX_AF      GpioAf1#define UART0_UNIT       M0P_UART0
#define UART0_CLK_EN     SysctrlPeripheralUart0
#define UART0_IRQ        UART0_2_IRQn#define BAUDRATE         115200en_result_t Hd_uart0_init(void);                //初始化函数
void Hd_uart0_send_byte(uint8_t data);          //发送字节函数
void Hd_uart0_send_string(const char* str);     //发送字符串函数#endif

task 

/*********************** 串口任务框架 ************************/
static void vUartTask(void *pvParameters)
{Hd_uart0_init();        //串口初始化printf("\nSystem start...");while (1){if (Rx_flag) {Rx_flag = 0;printf("\n");// 打印完整10字节for (uint8_t i = 0; i < 10; i++) {printf("%c", u8RxBuf[i]); // }memset(u8RxBuf, 0, 10); // 清空缓冲区inx = 0;                // 重置索引}vTaskDelay(pdMS_TO_TICKS(10)); // 适当增加延时减少竞争风险}
}

三、实现效果

相关文章:

  • 实战记录:Java 高并发插入 MySQL 唯一索引表引发死锁的排查与解决
  • 【51单片机中断】
  • 二维数组以及C99中的变长数组(如何在VS2022中使用苹果的clang编译器)
  • 基于MCP的桥梁设计规范智能解析与校审系统构建实践
  • 翼兴消防监控 – 大数据可视化HTML源码
  • python可视化:北方省市人口流动与春运数据综合分析5
  • 校园社区小程序源码解析
  • 记参加一次数学建模
  • 云基内容中台构建企业智慧实践
  • Java与C/C++跨平台互操作深度解析:Project Panama技术实战
  • ssh 配置了.ssh/authorized_keys 依旧需要密码的问题
  • 【Linux】序列化与反序列化、会话与进程组、守护进程
  • Fabric 服务端插件开发简述与聊天事件监听转发
  • 【C++ 基础数论】质数判断
  • AI大模型中系统化的KV Cache加速方案,减少KV Cache显存占用的优化方法
  • AI推介-大语言模型LLMs论文速览(arXiv方向):2024.11.25-2024.11.30
  • 【打破信息差】萌新认识与入门算法竞赛
  • QBasic 一款古老的编程语言在现代学习中的价值(附程序)
  • 刷leetcodehot100返航版--双指针5/16
  • 西安前端面试
  • “GoFun出行”订单时隔7年扣费后续:平台将退费,双方已和解
  • 收到延期付款利息,该缴纳增值税吗?
  • 中国人民银行等四部门联合召开科技金融工作交流推进会
  • 刘强东坐镇京东一线:管理层培训1800人次,最注重用户体验
  • 中央宣传部、全国妇联联合发布2025年“最美家庭”
  • 马上评|“衣服越来越难买”,对市场是一个提醒