四、UART_阻塞发送中断接收

1、开发环境

(1)Keil MDK: V5.38.0.0

(2)MCU: mm320163D7P

2、实验目的&原理图

2.1、实验目的

(1)上位机串口助手给MCU发送信息,MCU串口通过通过串口助手接收后,将接收到的内容通过串口助手发送到上位机。

(2)串口在whil循环中每隔1秒发送一次 hello world.\r\n

2.2、原理图

3、Keil 工程的创建

(1)打开Keil MDK。

(2)点击“Project”→“New μVision Project...”。

(3)选择工程保存地址及工程文件名,然后点击确定。

(4)选择相应的单片机型号,然后点击“OK”即可。

(5)弹出“管理运行时环境”对话框,保持默认,点击OK即可。

3、移植库文件

参考文章  三、LED闪烁-CSDN博客

4、编写代码

4.1、UART相关函数

(1)UART2引脚初始化

补充:

  • 根据个人实际开发经验,串口Rx引脚浮空输入和上拉输入都能接收到数据。
  • 参考网友建议配置为上拉输入。如果配置成浮空时会存在一定收到杂乱数据情况。
  • 参考地址:stm32 串口RX上拉还是浮空_串口 上拉-CSDN博客
/**功能:UART2引脚初始化*参数:无*返回值:无*/
static void UART2_GPIO_Init(void)
{// 定义一个GPIO结构体,用于配置GPIO参数GPIO_InitTypeDef GPIO_InitStruct;// 使能GPIOA时钟RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);/** #define GPIO_AF_0       (0x00U)     ///< Alternative function 0  内部振荡器* #define GPIO_AF_1       (0x01U)     ///< Alternative function 1  UART(通用异步收发器)* #define GPIO_AF_2       (0x02U)     ///< Alternative function 2  SPI(串行外设接口)* #define GPIO_AF_3       (0x03U)     ///< Alternative function 3  I2C(双向串行总线)* #define GPIO_AF_4       (0x04U)     ///< Alternative function 4  ADC(模数转换器)* #define GPIO_AF_5       (0x05U)     ///< Alternative function 5  DAC(数模转换器)* #define GPIO_AF_6       (0x06U)     ///< Alternative function 6  PWM(脉宽调制)* #define GPIO_AF_7       (0x07U)     ///< Alternative function 7  定时器/计数器*/GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1);  // 复用功能GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);  // 复用功能//UART2_TX   GPIOA.2GPIO_StructInit(&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;    // 推挽输出GPIO_Init(GPIOA, &GPIO_InitStruct);//UART2_RX    GPIOA.3GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
//	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_FLOATING; // 浮空输入GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;      // 上拉输入,接收引脚配置为该模式也可以GPIO_Init(GPIOA, &GPIO_InitStruct);  
}

(2)UART2初始化配置

/**功能:串口2初始化配置*参数:波特率*返回值:无*/
void UART2_Init(u32 baudrate)
{UART_InitTypeDef UART_InitStruct;  // 定义一个UART结构体,用于配置UART参数 NVIC_InitTypeDef NVIC_InitStruct;  // 定义一个中断控制器结构体,用于配置串口中断RCC_APB1PeriphClockCmd(RCC_APB1ENR_UART2, ENABLE);  // 使能时钟UART_StructInit(&UART_InitStruct);                  // 初始化UART结构体UART_InitStruct.BaudRate = baudrate;                     // 设置波特率UART_InitStruct.WordLength = UART_WordLength_8b;         // 8位数据位UART_InitStruct.StopBits = UART_StopBits_1;              // 1位停止位UART_InitStruct.Parity = UART_Parity_No;                 // 无校验位UART_InitStruct.HWFlowControl = UART_HWFlowControl_None; // 不使用硬件流控制UART_InitStruct.Mode = UART_Mode_Rx | UART_Mode_Tx;      // 设置UART模式为接收和发送  UART_Init(UART2, &UART_InitStruct);                      // 根据上述配置初始化UART2// 对GPIO进行初始化UART2_GPIO_Init();   //UART2 NVIC(中断控制器)NVIC_InitStruct.NVIC_IRQChannel = UART2_IRQn;  // 中断通道为UART2NVIC_InitStruct.NVIC_IRQChannelPriority = 1;   // 中断优先级为1NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;   // 使能中断通道NVIC_Init(&NVIC_InitStruct);                   // 根据上述配置初始化NVICUART_ITConfig(UART2, UART_IT_RXIEN, ENABLE);   // 使能串口接收中断UART_Cmd(UART2, ENABLE);  // 使能UART2
}

 (3)prinf重定义函数

  • #include "stdio.h"
  • 勾选包含微库

/**功能:重定义fput函数*参数:x*返回值:x*/
int fputc(int ch, FILE *f)
{UART_SendData(UART2, (uint8_t)ch);while (RESET == UART_GetFlagStatus(UART2, UART_FLAG_TXEPT));
//	while((UART2->CSR & UART_IT_TXIEN) == 0);                    // 和上面一句等效return (ch);
}

(4)UART2中断接收函数

/**功能:串口2中断函数*参数:无*返回值:无*/
void UART2_IRQHandler(void)
{uint8_t RxData = 0;// 检查指定的串口中断是否发生:接收数据中断if (RESET != UART_GetITStatus(UART2, UART_IT_RXIEN)){RxData = UART_ReceiveData(UART2);              // 接收数据printf("%c",RxData);                           // 打印接收到的数据UART_ClearITPendingBit(UART2, UART_IT_RXIEN);  // 清空中断挂起标志位	}
}

(4)main函数

int main(void)
{SysTick_InitDelay();UART2_Init(115200);while (1){printf("hello world.\r\n");SysTick_DelayMS(1000);	}
//	return 0;
}

4.2、总结:串口配置流程

(1)串口GPIO初始化配置

(2)串口结构体初始化配置

(3)串口中断控制配置

(4)使能串口中断

(5)使能串口

4.3、完整工程下载地址

(1)完整工程存储在码云。

(2)MM32: 灵动微电子mm32单片机CSDN对应示例程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/223412.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建

文章目录 前言一、搭建 Tauri 2.0 开发环境二、创建 Tauri 2.0 项目1.创建项目2.安装依赖4. 编译运行 三、设置开发环境四、项目结构 前言 Tauri在Rust圈内成名已久&#xff0c;凭借Rust的可靠性&#xff0c;使用系统原生的Webview构建更小的App 以及开发人员可以灵活的使用各…

离散型制造企业为什么要注重MES管理系统的实施

离散型制造企业经常面临三个核心问题&#xff1a;生产什么、生产多少以及如何生产。尽管许多企业都实施了ERP系统&#xff0c;但仍然绕不开MES管理系统的话题。本文将从三个方面详细解释为什么离散型企业需要实施MES管理系统。 一、生产线经常出现的问题 在离散型企业中&#…

Blazor 混合开发_MAUI+Vue_WPF+Vue

Blazor 混合开发_MAUIVue_WPFVue 背景混合开发的核心为什么必须使用 wwwroot 文件夹放置 Web 项目文件 创建 MAUI 项目创建 wwwroot 文件夹服务注册创建 _import.razor添加 Main.razor 组件修改 MainPage.xaml 文件 创建 WPF 项目创建 wwwroot 文件夹服务注册创建 _import.razo…

OpenCV利用HSV颜色区间分离不同物体

需求 当前有个需求是从一个场景中将三个不同的颜色的二维码分离出来&#xff0c;如下图所示。 这里有两个思路可以使用 思路一是通过深度学习的方式&#xff0c;训练一个能够识别旋转边界框的模型&#xff0c;但是需要大量的数据进行模型训练&#xff0c;此处缺少训练数据&a…

华清远见嵌入式学习——ARM——作业2

目录 作业要求&#xff1a; 现象&#xff1a; 代码&#xff1a; 思维导图&#xff1a; 模拟面试题&#xff1a; 作业要求&#xff1a; GPIO实验——3颗LED灯的流水灯实现 现象&#xff1a; 代码&#xff1a; .text .global _start _start: 设置GPIOEF时钟使能 0X50000…

Openwrt AP 发射 WiFi 信号

问题 想一次把 OpenWrt 路由器 wifi 问题给解决&#xff0c;完全取代路由器。 使用 倍控的 N5105 设备&#xff0c;有 mPCIe 接口&#xff0c;使用了 intel AX200 无线网卡&#xff0c;支持 2.4G 与 5G。 设置步骤 OpenWrt 镜像 第一次使用的镜像不支持 wifi&#xff0c;在…

量化服务器 - 后台挂载运行

服务器 - 后台运行 pip3命令被kill 在正常的pip命令后面加上 -no-cache-dir tmux 使用教程 https://codeleading.com/article/40954761108/ 如果你希望在 tmux 中后台执行一个 Python 脚本&#xff0c;你可以按照以下步骤操作&#xff1a; 启动 tmux: tmux这将会创建一个新…

Http---HTTP响应报文

1. HTTP响应报文分析 HTTP 响应报文效果图: 响应报文说明: --- 响应行/状态行 --- HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述 --- 响应头 --- Server: Tengine # 服务器名称 Content-Type: text/html; charsetUTF-8 # 内容类型 Transfer-Encoding: chunked # 发送给客…

HBase基础知识(三):HBase架构进阶、读写流程、MemStoreFlush、StoreFile Compaction、Region Split

1. 架构原理 1&#xff09;StoreFile 保存实际数据的物理文件&#xff0c;StoreFile以HFile的形式存储在HDFS上。每个Store会有一个或多个StoreFile&#xff08;HFile&#xff09;&#xff0c;数据在每个StoreFile中都是有序的。 2&#xff09;MemStore 写缓存&#xff0c;由于…

Hadoop入门学习笔记——三、使用HDFS文件系统

视频课程地址&#xff1a;https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接&#xff1a;https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记&#xff08;汇总&#xff09; 目录 三、使用HDFS文件系统3.1. 使用命令操作HDFS文件系统3.1.…

SecureCRT连接vmware虚拟机的centos系统配置

软件版本&#xff1a;VMware10.0.3&#xff0c;centos 7&#xff0c;securecrt 8.7.2 1&#xff0c;虚拟网络编辑器选择桥接模式&#xff0c; 2&#xff0c;如果不小心删除网络&#xff0c;centos关机状态下&#xff0c;选择恢复默认设置。 3&#xff0c;进入linux系统&#…

【线性代数】决定张成空间的最少向量线性无关吗?

答1&#xff1a; 是的&#xff0c;张成空间的最少向量是线性无关的。 在数学中&#xff0c;张成空间&#xff08;span space&#xff09;是一个向量空间&#xff0c;它由一组向量通过线性组合&#xff08;即每个向量乘以一个标量&#xff09;生成。如果这组向量是线性无关的&…

[JS设计模式]Mixin Pattern

Mixin是一个对象&#xff0c;我们可以使用它来为另一个对象或类添加可重用的功能&#xff0c;而无需使用继承。我们不能单独使用mixins:它们的唯一目的是在没有继承的情况下向对象或类添加功能。 假设对于我们的应用程序&#xff0c;我们需要创建多个狗。然而&#xff0c;我们…

STM32实现三个小灯亮

led.c #include"led.h"void Led_Init(void) {GPIO_InitTypeDef GPIO_VALUE; //???RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//???GPIO_VALUE.GPIO_ModeGPIO_Mode_Out_PP;//???? ????GPIO_VALUE.GPIO_PinGPIO_Pin_1|GPIO_Pin_2|GPIO_P…

Docker - 镜像 | 容器 日常开发常用指令 + 演示(一文通关)

目录 Docker 开发常用指令汇总 辅助命令 docker version docker info docker --help 镜像命令 查看镜像信息 下载镜像 搜索镜像 删除镜像 容器命令 查看运行中的容器 运行容器 停止、启动、重启、暂停、恢复容器 杀死容器 删除容器 查看容器日志 进入容器内部…

Linux创建macvlan 测试bridge、private和vepa模式

Linux创建macvlan&#xff0c;测试bridge、private和vepa模式 最近在看Docker的网络&#xff0c;看到关于macvlan网络的介绍。查阅了相关资料&#xff0c;记录如下。 参考 1.Linux Macvlan 2.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 环境 操…

谷粒商城-商品服务-新增商品功能开发(商品图片无法展示问题没有解决)

在网关配置路由 - id: member_routeuri: lb://gulimemberpredicates:- Path/api/gulimember/**filters:- RewritePath/api/(?<segment>.*),/$\{segment}并将所有逆向生成的工程调式出来 获取分类关联的品牌 例如&#xff1a;手机&#xff08;分类&#xff09;-> 品…

采用SpringBoot框架+原生HTML、JS前后端分离模式开发和部署的电子病历编辑器源码(电子病历评级4级)

概述&#xff1a; 电子病历是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图表、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的医疗记录,是病历的一种记录形式。 医院通过电子病历以电子化方式记录患者就诊的信息&#xff0c;包括&…

【智慧办公】如何让智能会议室的电子标签实现远程、批量更新信息?东胜物联网硬件网关让解决方案更具竞争力

近年来&#xff0c;为了减少办公耗能、节能环保、降本增效&#xff0c;越来越多的企业开始从传统的办公模式转向智慧办公。 以智能会议室为例&#xff0c;会议是企业业务中不可或缺的一部分&#xff0c;但在传统办公模式下&#xff0c;一来会议前行政人员需要提前准备会议材料…

助力打造清洁环境,基于YOLOv4开发构建公共场景下垃圾堆放垃圾桶溢出检测识别系统

公共社区环境生活垃圾基本上是我们每个人每天几乎都无法避免的一个问题&#xff0c;公共环境下垃圾投放点都会有固定的值班时间&#xff0c;但是考虑到实际扔垃圾的无规律性&#xff0c;往往会出现在无人值守的时段内垃圾堆放垃圾桶溢出等问题&#xff0c;有些容易扩散的垃圾比…