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

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)); // 适当增加延时减少竞争风险}
}

三、实现效果

http://www.xdnf.cn/news/6729.html

相关文章:

  • [ linux-系统 ] 命令行参数 | 环境变量
  • 数据库--向量化基础
  • C++跨平台开发:突破不同平台的技术密码
  • 从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区
  • 增量学习:机器学习领域中的资源高效利用秘籍
  • HTTPS 加密原理
  • 编译原理概述
  • 将three.js场景保存成图片
  • IEEE PRMVAI 2025 IEEE PRMVAI 探索人工智能在基础设施建设应用与运维中的新挑战
  • 某某建筑市场监管公共服务平台|数据解密—逆向分析
  • rocketmq 环境配置[python]
  • 记录算法笔记(2025.5.15)将有序数组转换为二叉搜索树
  • unity之导入本地packages包
  • 【云实验】搭建个人网盘实验
  • OSM路网简化文档+实操视频讲解(道路中心线提取、拓扑检查,学术论文处理方式)11
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(22):复习
  • AI基础知识(04):技术支柱、核心概念、开发工具、学习路径、伦理与挑战
  • python中常用的参数以及命名规范
  • Python - 爬虫;Scrapy框架之items,Pipeline管道持久化存储(二)
  • 每周靶点:HE4、S100β及文献分享
  • 安装ruoyi-vue-pro后台管理系统并启动bpm工作流模块
  • SAP EWM外向交货单过账/SCWM/GM043 错误
  • 数据库故障排查指南:从入门到精通
  • MySQL联表查询:多表关联与嵌套查询指南
  • 【C++】 一文读懂 std::latch
  • XML介绍及常用c及c++库
  • Python 在Excel单元格中应用多种字体样式
  • 5月16日复盘-目标检测开端
  • Grafana分布统计:Heatmap面板
  • 关于 2025 年国产化 AI 算力盒子的报告