STM32学习和实践笔记(27):USART串口通信实验程序

本实验所要实现的功能是:STM32F1通过USART1实现与PC机对话,STM32F1的USART1收到PC机发来的数据后原封不动的返回给PC机显示。同时使用D1指示灯不断闪烁提示系统正常运行。程序框架如下:

(1)初始化USART1,并使能串口接收中断等

(2)编写USART1中断函数

(3)编写主函数

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "usart.h"int main()
{u8 i;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组LED_Init();USART1_Init(9600);while(1){i++;if(i%20 ==0){led1=!led1;//LED1闪,用来指示主程序循环是否运行}delay_ms(10);}
}

usart.c

#include "usart.h"void USART1_Init(u32 BoudRate)
{GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //PA9为USART1的TXDGPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	//GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //PA10为USART1的RXDGPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//GPIO_Init(GPIOA,&GPIO_InitStructure);USART_InitStructure.USART_BaudRate = BoudRate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode =USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);  //使能串口1USART_ClearFlag(USART1, USART_FLAG_TC);//清除串口1发送中断标志位USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启RXNE(接收中断)//设置中断优先级,使能中断通道NVIC_InitStructure.NVIC_IRQChannel=	USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =3;NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}void USART1_IRQHandler(void)
{u8 r;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){r=USART_ReceiveData(USART1);//开发板接收从电脑发过来的数据USART_SendData(USART1, r);//开发板再把收到的数据发送回电脑while(USART_GetFlagStatus(USART1, USART_FLAG_TC)!=SET);//等待,直到发送完成USART_ClearFlag(USART1, USART_FLAG_TC);//清除串口1发送中断标志位}}

usart.h

#ifndef _usart_H
#define _usart_H
#include "system.h"void USART1_Init(u32 BoudRate);#endif

实际上机试验是成功的!如下:

因为程序是使用的串口1,所以硬件连线上就是使用下载程序的USB线就可以,并不需要另外再增加连接线。

最开始出现这个错误:WriteFile function failed (win error code: 5)

估计下载程序的占用了这个串口,所以关掉下载程序,并且重启电脑,只打开串口调试助手程序,按照开发攻略中的指导重新设置下串口调试助手,实验就可以了。

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

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

相关文章

51单片机实现俄罗斯方块游戏编程

一、设计要求 (1)利用51单片机,设计一款俄罗斯方块游戏,完成硬件电路的开发和程序的编写调试; (2)采用LCD12864液晶作为游戏运行界面; (3)利用按键输入灵活…

Spring Boot集成dubbo快速入门Demo

1.什么是dubbo? Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力…

HTML飘落的花瓣

目录 写在前面 HTML​​​​​​​简介 完整代码 代码分析 系列推荐 写在最后 写在前面 本期小编给大家推荐HTML实现的飘落的花瓣,无需安装软件,直接下载即可打开~ HTML​​​​​​​简介 HTML(Hypertext Markup Language&#xff…

探索Playwright:Python下的Web自动化测试革命

在如今这个互联网技术迅速发展的时代,web应用的质量直接关系着企业的声誉和用户的体验。因此,自动化测试成为了保障软件质量的重要手段之一。今天,我将带大家详细了解一款在测试领域大放异彩的神器——Playwright,并通过Python语言…

一觉醒来 AI科技圈发生的大小事儿 05月13日

📳博弈论让 AI 更加正确、高效,LLM 与自己竞争 研究团队设计了共识博弈,通过让语言模型的生成器和判别器相互博弈来提高模型的准确性和内部一致性。这种方法不需要对基础模型进行训练或修改,可以在笔记本电脑上快速执行。研究结果…

基于微信小程序+JAVA Springboot 实现的【停车场小程序】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称: 停车场微信小程序的设计与实现 在当前信息技术飞速发展的背景下,停车场微信小程序的开发成为了一个创新的解决方案,旨在提高停车场管理的效率和用户的停车体验。本项目通过深入分析现有停车场管理系统的不足&#xff0c…

内存屏障 - LINUX KERNEL MEMORY BARRIERS 上 与 下

内存屏障(Memory Barrier)是在计算机体系结构中使用的一种同步机制,用于确保在多线程或多核处理器环境中,对共享内存的操作按照预期顺序进行。它们通过强制在特定点执行一些指令来规定内存访问的顺序,并防止内存乱序执…

使用PageHelper分页插件,发现获取到的total总记录数量不对,无法获取到正确的total数量

目录 1.1、错误描述 1.2、解决方案 1.1、错误描述 周一在工作中,写了一个列表分页的接口,其中使用的是PageHelper分页依赖,原本想着挺简单的,也就是使用PageHelper.startPage(pageNum, pageSize);方法就可以了,代码…

Linux下COOLFluiD源码编译安装及使用

目录 软件介绍 基本依赖 其它可选依赖 一、源码下载 二、解压缩(通过Github下载zip压缩包格式) 三、编译安装 3.1 依赖项-BOOST 3.2 依赖项-Parmetis 3.3 依赖项-PETSc 3.4 安装COOLFluiD 四、算例运行 软件介绍 COOLFluiD(面向对象…

学术共振 美妙发声 | 2024美沃斯大会完美收官,米兰柏羽倾力承办

5月10日-5月12日,为期3天的第十七届美沃斯医疗美容大会在杭州国际博览中心盛大举办,作为行业顶级学术交流平台,本届美沃斯大会不仅是医美行业的一次学术交流盛会,更是一次深度探讨行业未来的远眺之窗。 5月9日,即美沃…

vue-router路由,带参数的动态路由匹配(2024-05-14)

需求 需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数 &#…

添砖Java之路(其五)——封装,String,StringBuilder类。

封装: 封装意义:更好的维护数据,让使用者无需关心如何使用,只需要知道怎么使用。 Java Bean: 然后我们要知道Java Bean(实体类)标准。 1.对于这个类的成员都需要设为私有,而且要对外提供相应Get,Set的接…

组合商标申请如何风控提高通过率!

最近一个老客户找到普推知产老杨,说要申请注册一个新的商标,是一个组合商标,有图形,两行文字,一行文字的拼音,还有三个字母的简称,组合商标在申请时会进行拆分审查,图形、文字、拼音…

【C++初阶】第十一站:list的介绍及使用

目录 list的介绍及使用 1.list的含义 2.list的介绍 3.list的使用 1.list的构造 2.list iterator的使用 3.list capacity 4.list element access 5 list modifiers 尾插尾删 和 头插头删 insert 和 erase resize swap clear 6.list sort and reverse 7.list copy vector copy li…

11.php-fpm模板(监控页面取值)

php-fpm模板(监控页面取值) 开启监控页面配置 #修改php配置文件 vim /etc/php-fpm.d/www.conf pm.status_path /php_status#修改nginx配置文件,添加到nginx配置文件中 vim /etc/nginx/conf.d/default.conflocation /php_status {root html;fastcgi_pass 127.0.…

肥猫“也能变“型男“?揭秘福派斯牛肉高脂猫粮的神奇效果!

福猫养成指南:福派斯牛肉高脂猫粮的优点与考虑因素 福派斯牛肉高脂猫粮,这款富含蛋白质与脂肪的猫粮,仿佛是猫咪世界中的美味佳肴,让无数猫咪为之倾倒。然而,这款猫粮的利与弊,你是否都了解呢?接…

AI模型部署实战:利用OpenCV的CUDA模块加速视觉模型部署流程

本文首发于公众号【DeepDriving】,欢迎关注。 一. 前言 我在之前的文章《AI模型部署实战:利用CV-CUDA加速视觉模型部署流程》中介绍了如何使用CV-CUDA库来加速视觉模型部署的流程,但是CV-CUDA对系统版本和CUDA版本的要求比较高,在…

Linux实验 Shell编程

实验目的: 熟练掌握Shell程序的建立与执行;掌握Shell变量的两种类型(Shell环境变量和用户自定义变量)及其用法;掌握Shell中的特殊字符、算术与逻辑运算;掌握Shell中输入输出命令;掌握Shell程序…

在Windows环境下安装CPU版的PyTorch

PytTorch是基于Python开发的,首先需要安装Python,Python的安装很简单,这里不再赘述。而 Windows用户能直接通过conda、pip和源码编译三种方式来安装PyTorch。 打开PyTorch官网(PyTorch),在主页中根据自己的…

python数据分析——时间序列

时间序列 前言一、Datetime 模块常用函数和数据结构的详细解释datetime模块示例一示例二 二、时间运算示例一示例二示例三 三、时间序列分析自回归(Autoregressive model/AR)模型示例 滑动平均(moving average model/MA)模型示例 自回归滑动平均(Autoregressive moving average…