STM32 F103C8T6学习笔记3:串口配置—串口收发—自定义Printf函数
今日学习使用STM32 C8T6的串口,我们在经过学习笔记2的总结归纳可知,STM32 C8T6最小系统板上有三路串口,如下图:

今日我们就着手学习如何配置开通这些串口进行收发,这里不讲串口通信概念与基础,可以自行网上查找,本文直接开始介绍库函数与编程实现:
串口配置相关库函数介绍:
打开串口GPIO的时钟:
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
/*
#define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100)
*/
打开串口外设的时钟:
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
/*
#define RCC_APB2Periph_USART1 ((uint32_t)0x00004000)
#define RCC_APB1Periph_USART2 ((uint32_t)0x00020000)
#define RCC_APB1Periph_USART3 ((uint32_t)0x00040000)
#define RCC_APB1Periph_UART4 ((uint32_t)0x00080000)
#define RCC_APB1Periph_UART5 ((uint32_t)0x00100000)
*/
串口的初始化配置:
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
/*
USART1 USART2 USART3*/
向量中断控制器组选择:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
初始化配置NVIC:
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
串口接收:
USART_ReceiveData(USART1)
串口配置编程:
首先创建好要用的几个文件.c 与.h,在添加进工程,别忘了添加路径~

串口的初始化:
以下是串口1的初始化以及配置中断优先级,中断优先级的配置分为主优先和子优先,有关中断优先级的配置这放在以后再说~~~,
测试工程文件我还编写了串口2,3的初始化,可以下载测试观察~
#include "USART_init.h"void Usart1_Init(unsigned int baud)
{GPIO_InitTypeDef gpio_initstruct;USART_InitTypeDef usart_initstruct;NVIC_InitTypeDef nvic_initstruct;// 打开串口GPIO的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 打开串口外设的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//PA9 TXD // 将USART Tx的GPIO配置为推挽复用模式gpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;gpio_initstruct.GPIO_Pin = GPIO_Pin_9;gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpio_initstruct);//PA10 RXD // 将USART Rx的GPIO配置为浮空输入模式gpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;gpio_initstruct.GPIO_Pin = GPIO_Pin_10;gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpio_initstruct);usart_initstruct.USART_BaudRate = baud; //配置波特率usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控 usart_initstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //接收和发送 usart_initstruct.USART_Parity = USART_Parity_No; //无校验usart_initstruct.USART_StopBits = USART_StopBits_1; //配置停止位 1位停止位usart_initstruct.USART_WordLength = USART_WordLength_8b; //配置 针数据字长 8位数据位// 完成串口的初始化配置USART_Init(USART1, &usart_initstruct);USART_Cmd(USART1, ENABLE); //使能串口USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收中断NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 嵌套向量中断控制器组选择 */nvic_initstruct.NVIC_IRQChannel = USART1_IRQn; /* 配置USART为中断源 */nvic_initstruct.NVIC_IRQChannelCmd = ENABLE; /* 使能中断 */nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 0; /* 抢断优先级*/nvic_initstruct.NVIC_IRQChannelSubPriority = 2; /* 子优先级 */NVIC_Init(&nvic_initstruct); /* 初始化配置NVIC */}
串口中断服务函数的编写:
首先在启动文件找到三个串口的中断服务函数:

void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断{USART_ClearFlag(USART1, USART_FLAG_RXNE);}//返回收到的任意数据USART_SendData(USART1,USART_ReceiveData(USART1)); }
测试结果截图:

工程下载:
https://download.csdn.net/download/qq_64257614/88201777?spm=1001.2014.3001.5503
相关文章:
STM32 F103C8T6学习笔记3:串口配置—串口收发—自定义Printf函数
今日学习使用STM32 C8T6的串口,我们在经过学习笔记2的总结归纳可知,STM32 C8T6最小系统板上有三路串口,如下图: 今日我们就着手学习如何配置开通这些串口进行收发,这里不讲串口通信概念与基础,可以自行网上…...
python中字符串内建函数篇4
一、ljust() 语法:str.ljust(width,[fillchar]) 参数说明: width – 指定字符串长度。 fillchar – 填充字符,默认为空格。 返回值:返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于原字符串…...
并发下如何使用redis存储列表数据
1、问题 今天在工作中遇到一个问题,需要查询表A,需要根据每天所处小时所在时段,返回不同的记录给前端展示,如0-2时是在昨日0到2时生成的记录,而2-4时则是在昨日2-4时生成的记录,每条记录有一个唯一的id。表…...
Leecode螺旋矩阵 II59
59.螺旋矩阵II 题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 文章讲解:代码随想录 视频…...
echarts 横向柱状图
<template><div ref"chart" style"height: 100%"></div> </template><script> import * as echarts from "echarts"; var cate ["质量通病1", "质量通病2", "质量通病3", "质…...
Vue3 —— to 全家桶及源码学习
该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>,且包含 typescript 的基础用法 前言 本篇主要学习几个 api 及相关源码: toReftoRefstoRaw 一、toRef toRef(reactiveObj, key) 接收两个参数,第一个是 响应式对象…...
(第三篇) ansible-kubeadm在线安装高可以用集群()
ansible可以安装的KS8版本如下: 请按照此博客中的内容操作后,才可以通过下面的命令查询到版本。 [rootk8s-master01 ~]# yum list kubectl --showduplicates | sort -r kubectl.x86_64 1.20.0-0 kubern…...
flutter开发实战-颜色Color与16进制转换
flutter开发实战-颜色Color与16进制转换 一、颜色Color与16进制转换 代码如下 import dart:ui; class ColorUtil {/// 十六进制颜色,/// hex, 十六进制值,例如:0xffffff,/// alpha, 透明度 [0.0,1.0]static Color hexColor(int hex, {doub…...
Linux(进程地址空间)
进程地址空间 程序地址空间进程地址空间 程序地址空间 在Linux环境下,我们可以对上述程序空间地址进行验证: 运行程序,可以看到,我们就可以很好看出程序的地址空间的排布了: 进程地址空间 严格来说,我们…...
VLAN监控及常见问题排查
局域网,我们通常称为LAN,是一种由基于同一地理位置的设备组成的网络,可实现它们之间的通信,局域网的虚拟对应物是虚拟局域网或 VLAN。VLAN 增强了 LAN,提供了进行更改的灵活性、更高的可扩展性和更好的安全性。 使用 …...
PromQL实现Actuator获取的JVM指标的Full GC次数监控
Spring Boot 版本需要2.0.0或更高版本。 添加Micrometer Prometheus registry依赖: <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId> </dependency>在application.properties中开…...
3.正则表达式
3.1什么是正则表达式 ●正则表达式( Regular Expression) 是用于匹配字符串中字符组合的模式。在JavaScript中, 正则表达式也是对象 ●通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式 ●正则表达式在JavaScript中的使用场景: ➢…...
【学习FreeRTOS】第3章——FreeRTOS移植及配置文件
1.FreeRTOS源码简介 【一级目录:/】以下FreeRTOS的源码,其中,FreeRTOS文件夹最为重要,代笔FreeRTOS内核 【二级目录:/FreeRTOS】以下为FreeRTOS文件夹的内容,比较重要的有Demo文件夹和Source文件夹 【三级…...
Java算法_ LRU 缓存(LeetCode_Hot100)
题目描述:请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 获得更多?算法思路:代码文档,算法解析的私得。 运行效果 完整代码 import java.util.HashMap; import java.util.Map;/*** 2 * Author: L…...
Hugging Face 的文本生成和大语言模型的开源生态
[更新于 2023 年 7 月 23 日: 添加 Llama 2。] 文本生成和对话技术已经出现多年了。早期的挑战在于通过设置参数和分辨偏差,同时控制好文本忠实性和多样性。更忠实的输出一般更缺少创造性,并且和原始训练数据更加接近,也更不像人话。最近的研…...
Docker Compose用法详解
文章目录 Docker Compose是什么安装Docker ComposeCompose文件编写使用Docker Compose部署-管理应用 Docker Compose是什么 Docker Compose是一个用于定义和运行多容器Docker应用程序的python工具。它允许您使用一个单独的配置文件来定义和配置多个相关容器的服务,…...
分布式链路追踪概述
分布式链路追踪概述 文章目录 分布式链路追踪概述1.分布式链路追踪概述1.1.什么是 Tracing1.2.为什么需要Distributed Tracing 2.Google Dapper2.1.Dapper的分布式跟踪2.1.1.跟踪树和span2.1.2.Annotation2.1.3.采样率 3.OpenTracing3.1.发展历史3.2.数据模型 4.java探针技术-j…...
css中的var函数
css中的var函数 假设我们在css文件存在多个相同颜色值,当css文件越来越大的时候,想要改颜色就要手动在每个旧颜色上修改,这样维护工作非常难进行。 但是我们可以使用变量来存储值,这样可以在整个css样式表中重复使用,…...
第五次作业 运维高级 构建 LVS-DR 集群和配置nginx负载均衡
1、基于 CentOS 7 构建 LVS-DR 群集。 LVS-DR模式工作原理 首先,来自客户端计算机CIP的请求被发送到Director的VIP。然后Director使用相同的VIP目的IP地址将请求发送到集群节点或真实服务器。然后,集群某个节点将回复该数据包,并将该数据包…...
neo4j电影库-关系查询
关系类型数量源数据目标数据属性ACTED_IN172演员电影roles(角色扮演)属性,属性值为数组DIRECTED44导演电影无PRODUCED15制片商电影无WROTE10作家电影无FOLLOWS3影评人影评人无REVIEWED9影评人电影summary(影评摘要)和 …...
C# DevExpress 控件高效开发指南(1)
1. DevExpress控件入门指南 第一次接触DevExpress控件时,我被它丰富的功能惊艳到了。记得当时接手一个医疗管理系统项目,客户要求界面要美观、操作要流畅,还要支持复杂的数据展示。用了DevExpress后,开发效率直接翻倍,…...
Hermes Agent vs OpenClaw:我花了一周对比,说说真实感受
先说结论Hermes Agent 的核心卖点是"会自己变聪明"——完成任务后会自动提炼技能、积累记忆,用得越久越好用。OpenClaw 的核心卖点是"生态大"——50 平台接入、13000 社区技能,开箱即用。两个都是 MIT 开源。选哪个,取决…...
Anything V5图像生成服务实测:512x512分辨率下的惊艳效果展示
Anything V5图像生成服务实测:512x512分辨率下的惊艳效果展示 1. 开篇:认识Anything V5 Anything V5是基于Stable Diffusion技术构建的专用图像生成模型,专注于提供高质量的动漫风格图像生成能力。作为"万象熔炉"系列的最新版本&…...
Windows大数据开发者的救星:3步解决Hadoop环境配置难题
Windows大数据开发者的救星:3步解决Hadoop环境配置难题 【免费下载链接】winutils Windows binaries for Hadoop versions (built from the git commit ID used for the ASF relase) 项目地址: https://gitcode.com/gh_mirrors/wi/winutils 你是否曾在Window…...
MySQL超详细安装教程(保姆级)
1.官网下载mysql安装包 MySQL :: 下载MySQL社区服务器https://dev.mysql.com/downloads/mysql/ 2.下载完成后解压到一个文件夹 注意:不带中文 这个路径要记住,我们等下会用到 3.添加环境变量 环境变量里面有很多选项,这里我们只用到Path这…...
5分钟掌握:Dell G15散热控制的终极开源解决方案
5分钟掌握:Dell G15散热控制的终极开源解决方案 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为Dell G15笔记本散热问题烦恼吗?官…...
Tusky性能优化技巧:如何打造流畅的Mastodon体验
Tusky性能优化技巧:如何打造流畅的Mastodon体验 【免费下载链接】Tusky An Android client for the microblogging server Mastodon 项目地址: https://gitcode.com/gh_mirrors/tu/Tusky Tusky作为一款优秀的Android版Mastodon客户端,其性能优化设…...
Unity2020.3.40f1c1无法打开
使用unityhub或者直接点击exe都无法打开,但其他版本的如2022和unity6都正常可以打开,检查电脑里面是否安装过unity2017,unity5.x等不使用unityhub管理的老版本。如果有卸载他们即可,他们的licenses会冲突。...
2025最权威的十大AI辅助写作网站实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 专为学术论文、毕业论文以及期刊稿件量身打造的维普AIGC检测系统,是基于深度学习…...
Face Swap API 集成与使用指南
在当今数字化时代,图像处理技术越来越受到开发者的关注。Face Swap API 是一个强大的工具,它能够将目标图像中的人脸与源图像中的人脸进行交换。本文将详细介绍如何集成和使用 Face Swap API,帮助你快速上手这项技术。 简介 Face Swap API …...
