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

串口TI基本通信(学不会电磁场)(阻塞式串口接收中断)

实现效果:电脑向单片机发送什么,单片机通过串口向电脑返回什么在调试助手里

主要知识点:阻塞式串口接收中断

实现过程:(保证时钟主频80M,勾选use clock tree,中断回调函数写在usart.c里面)

1.配置sysconfig

添加一组UART,名字自定义,然后波特率也自定义,这里用9600

打开接收中断

选择引脚

在empty工程里面加入usart.c和usart.h文件

usart.c

#include "uart.h" /** * @brief UART发送单个字节(阻塞式发送,等待发送完成才返回) * @param uart: UART外设寄存器基地址指针,指向目标UART实例 * @param chr: 需要发送的8位字节数据(字符/数值均可) * @note 底层调用TI DriverLib阻塞发送接口,函数会一直阻塞直到发送寄存器为空 */ void UART_send_char(UART_Regs *uart, uint8_t data) { // 等待UART发送硬件空闲,上一字节发送完成 while (DL_UART_isBusy(uart) == true); // 写入数据寄存器,启动发送 DL_UART_transmitData(uart, data); } /** * @brief UART发送完整字符串(自动遍历直到字符串结束符'\0') * @param uart: UART外设寄存器基地址指针,指定发送使用的UART外设 * @param str: 待发送字符串首地址,必须以'\0'作为结束标志 * @note 循环逐个取出字符调用单字节发送函数,阻塞发送,无长度限制,依赖字符串终止符 */ void UART_send_string(UART_Regs *uart, const char *str) { // 判断当前指针指向字符是否不为'\0',非0则继续发送 while (*str) { // 将char类型强转为uint8_t无符号字节,调用单字节发送接口输出 UART_send_char(uart, (uint8_t) *str); // 字符串指针向后偏移1字节,指向下一个待发送字符 str++; } } /** * @brief PRINT_INST串口中断服务函数,实现串口回显功能(收到什么立刻发回) * @note PRINT_INST为工程中宏定义的调试打印串口实例(如UART0/UART1) * 该函数在UART产生中断时由中断向量自动进入,不可手动调用 */ void PRINT_INST_IRQHandler() { // 获取当前UART挂起的中断类型,用于区分是接收中断、发送中断还是错误中断 switch (DL_UART_getPendingInterrupt(PRINT_INST)) { // 接收数据中断:RX缓冲区收到有效字节触发此中断 case DL_UART_IIDX_RX: { // 读取UART接收缓冲区中的1字节数据,读取后硬件自动清除RX中断标志 uint8_t rec = DL_UART_receiveData(PRINT_INST); // 将刚收到的数据原路发回串口,实现收发回显 UART_send_char(PRINT_INST, rec); break; } // 其他所有中断类型(发送完成、溢出、奇偶校验错误等)不作处理,直接退出 default: break; } }

usart.h

#ifndef UART_H #define UART_H /** * @file uart.h * @brief MSPM0 通用串口驱动头文件 * @details 封装串口单字节、字符串发送接口,基于TI DriverLib库实现 * @author 嵌入式开发 * @note 依赖ti_msp_dl_config.h,需提前完成串口外设初始化配置 */ // 引入TI MSPM0官方驱动库总头文件,提供UART_Regs、DL_UART系列函数、PRINT_INST等宏定义 #include "ti_msp_dl_config.h" /** * @brief 串口阻塞发送单个字节 * @param uart UART外设寄存器基地址指针,指定要操作的串口外设 * @param chr 待发送的8位无符号字节数据 */ void UART_send_char(UART_Regs *uart, const uint8_t chr); /** * @brief 串口阻塞发送完整字符串 * @param uart UART外设寄存器基地址指针,指定要操作的串口外设 * @param str 待发送字符串首地址,字符串必须以'\0'结尾 */ void UART_send_string(UART_Regs *uart, const char *str); #endif /* UART_H */

main.c里面测试:

#include "ti_msp_dl_config.h" #include <stdio.h> #include "uart.h" int main(void) { SYSCFG_DL_init(); // 使能PRINT_INST对应的UART串口中断,开启串口接收中断响应 NVIC_EnableIRQ(PRINT_INST_INT_IRQN); while (1) { } }

想单独向串口调试助手发送内容,在while循环里面写:

UART_send_string(PRINT_INST, "hello, ti!\n");

不过要加delay函数延时。

http://www.jsqmd.com/news/1218715/

相关文章:

  • CC32xx PRCM寄存器详解:嵌入式低功耗设计的时钟与电源管理实战
  • SpringBoot+Vue3智慧停车场管理系统:Java全栈实战开发指南
  • 塔科夫生存法则:Mosquito、Rat、Roach三种高效战术解析
  • SpringBoot+Vue微信小程序电商系统开发实战
  • MT5与Python金融数据分析实战:从数据获取到机器学习预测
  • Cordova跨平台移动应用开发指南
  • CC32xx ADC寄存器级配置:FIFO、中断与DMA高效数据采集实战
  • 基于AM437x与AMC1304的高精度隔离电流电压测量方案解析
  • CC32xx电源管理实战:从低功耗模式到物联网设备续航优化
  • 网络编程与MySQL数据库核心技术解析与优化实践
  • Mixamo动画无缝导入Unreal Engine:骨骼重定向与自动化转换全攻略
  • 欧米茄官方售后服务中心全部地址与客服热线实地考察报告+多信源验证(2026年7月更新) - 欧米茄官方服务中心
  • AM62L CBASS防火墙配置实战:从寄存器手册到安全策略实现
  • 深入解析TI EDMA控制器:中断与PaRAM寄存器配置实战
  • Blender到Unity模型导出终极方案:用CATS插件解决坐标转换难题
  • AI群落:面向协同演化的多智能体新范式
  • 嵌入式系统启动流程深度解析:从ROM代码到Bootloader的完整指南
  • 深入解析TPCC:IVA2.2 EDMA引擎的寄存器配置与实战应用
  • 剪映破解版风险分析与合法视频剪辑方案技术指南
  • 深入解析C2000 ePWM死区生成与硬件故障保护机制
  • 浪琴中国官方售后服务中心|服务电话及详细网点地址权威信息通知(2026年7月最新) - 浪琴服务中心
  • Mythos:通用AI模型如何重构网络安全攻防范式
  • 深入解析TI 14xx毫米波雷达SoC:FMCW原理、芯片架构与工程实践
  • 基于MSP430与RF430CL330H的NFC标签开发:低功耗中断驱动与NDEF数据实战
  • 深入解析TI 16xx芯片AWR模块:电源、时钟、复位与安全寄存器的实战配置
  • 阀门泄漏常见原因及解决办法
  • EDMA控制器事件与中断寄存器详解:从原理到嵌入式开发实践
  • 华为定位API在Flutter中的高精度定位实现
  • 2026年Android开发新趋势与工具链深度解析
  • Python实现四则运算生成器的工程实践