32串口学习

基于之前的GPIO等工程,后面的上手难度就简单多了,主要是相关寄存器的设置。

void USART1_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	
	/* config USART1 clock */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
	
	/* USART1 GPIO config */
	/* Configure USART1 Tx (PA.09) as alternate function push-pull */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);    
	/* Configure USART1 Rx (PA.10) as input floating */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	  
	/* USART1 mode config */
	USART_InitStructure.USART_BaudRate = 9600;
	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);
}

UART的初始化寄存器明显多了很多。

int main(void)
{	
	/* USART1 config 115200 8-N-1 */
	USART1_Config();
	
	printf("\r\n welcome to stm32 \r\n");

	printf("\r\n hello stm32:) \r\n");
		
	USART1_printf(USART1, "\r\n Welcome to STM32 \r\n");
	
	USART1_printf(USART1, "\r\n ("__DATE__ " - " __TIME__ ") \r\n");

	for(;;)
	{
		printf("\r\n 欢迎使用STM32_测试fprintf:) \r\n");
		Delay(0x2fffff);
	}
}

按照原有理解,fprintf跟专门写的UART_printf不一样,UART才是串口输出的端口,但是fprintf竟然可以直接输出到串口,但是没有系统重定向的机制,转入define没有对应的参数。

int fputc(int ch, FILE *f)
{
	/* 将Printf内容发往串口 */
	USART_SendData(USART1, (unsigned char) ch);
//	while (!(USART1->SR & USART_FLAG_TXE));
	while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);	
	return (ch);
}

查了下才发现,用了重定向功能,fputc就是将printf函数重定向。

使用了网上介绍的防中文打印乱码的四种方法,没有成功,打印中文仍然乱码。

尴尬,竟然因为是新起的工程,原来改成9600的波特率,在新工程没有改,仍然是115200,改正后正常。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

可视化图表:雷达图的全面介绍,一篇就够了。

一、什么是雷达图 雷达图(Radar Chart)是一种可视化图表,也被称为蛛网图、星形图或极坐标图。它以一个中心点为起点,从中心点向外延伸出多条射线,每条射线代表一个特定的变量或指标。每条射线上的点或线段表示该变量在…

Linux常用命令之搜索查找类

1.1find查找文件或目录 1)基本语法 find [搜索范围] [ 选项] find -name:按照名字查找 find -user:按用户相关查找 find -size:按照文件大小查找 1.2locate快速定位文件路径 经验技巧:由于locate指令基于数据库进行…

Ubuntu上搭建TFTP服务

Ubuntu上搭建TFTP服务 TFTP服务简介搭建TFTP服务安装TFTP服务修改配置文件 重启服务 TFTP服务简介 TFTP是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适用于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计,只…

信息学奥赛之C++ cstdlib – 概览

什么是 C cstdlib? C 标准库头文件 (cstdlib in C) 是 C 程序员使用最广泛的库头文件。即:standard librarian。它定义了一系列函数和宏,以实现跨团队、跨平台的高效且具有卓越表现的标准化 C 代码。 C 是一种广受欢迎的程序语言&#xff0c…

总结

文章目录 1. GateWay:100102. Docker3. ES:海量数据的存储、搜索、计算3.1 数据搜索3.2 数据同步 4. 微服务保护:Sentinel4. 分布式事务:(二阶段提交)5. Redis6. 多级缓存 1. GateWay:10010 2. …

【工具】Mermaid + 大模型画流程图

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 引入使用画TCP三次握手了解历史人物 总结 引入 最近看面试文章关于TCP三次握手和…

【数据结构】链表力扣刷题详解

前言 题目链接 移除链表元素 链表的中间结点 反转链表 分割链表 环形链表的约瑟夫问题 ​ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 移除链表元素 题述 给你一个链表的头节点 head 和一个整数 val ,请…

基于python的在线学习与推荐系统

技术:pythonmysqlvue 一、系统背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大…

大模型知识库

一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 1. 下载Langchain-chatchat git clone https://github.com/chatchat-space/Langchain-Chatchat/ 2. 下载大模型和embe…

从零开始学习在VUE3中使用canvas(一):实现一个基础的canvas画布

一、步骤 1.写一个canvas元素 2.获取虚拟dom 3.获取绘制环境 4.绘制想要的效果 5.在挂载后执行 二、代码 <template><div class"canvasPage"><!-- 写一个canvas标签 --><canvas class"main" ref"main"></canv…

StringTable(字符串常量池)

目录 String的基本特性 String的内存分配 字符串拼接操作 intern()的使用 String的基本特性 String&#xff1a;字符串&#xff0c;使用一对""引起来表示 String声明为final的&#xff0c;不可被继承 String实现了Serializable接口&#xff1a;表示字符串是支持…

Docker可视化容器管理工具(Portainer)

一、简介 Portainer 是 Docker 的轻量级&#xff0c;跨平台和开源管理 UI。Portainer 提供了 Docker 的详细概述&#xff0c;并允许您通过基于 Web 的简单仪表板管理容器&#xff0c;镜像&#xff0c;网络和卷。支持 GNU/Linux&#xff0c;Windows 和 Mac。 官网地址&#xf…

Python爬虫之Scrapy框架系列(24)——分布式爬虫scrapy_redis完整实战【XXTop250完整爬取】

目录&#xff1a; 每篇前言&#xff1a;1.使用分布式爬取豆瓣电影信息&#xff08;1&#xff09;settings.py文件中的配置&#xff1a;&#xff08;2&#xff09;spider文件的更改&#xff1a;&#xff08;3&#xff09;items.py文件&#xff08;两个项目一致&#xff01;&…

c语言(数据在内存中的存储)

1. 整数在内存中的存储 整数的2进制表⽰⽅法有三种&#xff0c;即原码、反码和补码 三种表⽰⽅法均有符号位和数值位两部分&#xff0c;符号位都是⽤0表⽰“正”&#xff0c;⽤1表⽰“负”&#xff0c;⽽数值位最 ⾼位的⼀位是被当做符号位&#xff0c;剩余的都是数值位。 正整…

手写简易操作系统(十二)--实现时钟中断

前情提要 前面我们开启了中断&#xff0c;但是这些中断都对应着一个通用的中断处理函数&#xff0c;而且几乎都是处理器触发的中断&#xff0c;没有我们的外设中断&#xff0c;虽然我们提前预留了这些接口。 现在我们实现一个时钟中断 一、可编程计数器8253 计算机中的时钟…

基于SpringBoot+MyBatis-Plus的图书管理系统

基于SpringBoot的图书管理系统 图书管理系统开发技术功能模块代码结构数据库设计运行截图源码获取 图书管理系统 开发技术 技术&#xff1a;SpringBoot、MyBatis-Plus、MySQL、Beetl、Layui。 框架&#xff1a;基于开源框架Snowy-Layui开发。 工具&#xff1a;IDEA、Navicat等…

2078: [蓝桥杯2023初赛] 01 串的熵

对于一个长度为 n 的 01 串 S x1x2x3...xn. 香农信息熵的定义为&#xff1a; 。 其中 p(0), p(1) 表示在这个 01 串中 0 和 1 出现的占比。 比如&#xff0c;对于S 100 来说&#xff0c;信息熵 H(S ) - 1/3 log2(1/3) - 2/3 log2(2/3) - 2/3 log2(2/3) 1.3083。 对于一个…

QT--信号和槽机制

信号槽 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c;按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号(signal)。这种发出是没有目的的&#xff0c;类似广播。如果有对象对这个…

选择排序算法(Selection Sort)原理及实现

选择排序算法&#xff0c;运行效率不高&#xff0c;但是非常容易理解&#xff0c;算法复杂度为 。 原理&#xff1a; 假设要排序的数组的长度为n&#xff0c;将数组先分为两个部分&#xff0c;一个是有序区域部分&#xff0c;另一个为无序区域部分。初始时有序部分中没有元素…

Python学习:注释和运算符

python 注释 在Python中&#xff0c;注释用于在代码中添加解释、说明或者提醒&#xff0c;但并不会被解释器执行。Python中的注释以#开头&#xff0c;直到行末为止。下面是关于Python注释的详细解释和举例&#xff1a; 单行注释&#xff1a;使用#符号在行的开头添加注释&…