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

STM32 寄存器配置笔记——USART配置 打印

一、概述

       本文主要介绍如何配置USART,并通过USART打印验证结果。以stm32f10为例,将PA9、PA10复用为USART功能,使用HSE PLL输出72MHZ时钟 APB2 clk不分频提供配置9600波特率。波特率计算公式如下:

fck即为APB2 clk参考计算:

硬件图:

二、配置流程

        1)配置系统时钟输出72MHZ

         参考上文STM32 寄存器配置笔记——系统时钟配置 HSE as PLL

        2)计算USARTDIV

        USARTDIV = fck / 波特率 * 16

temp = (float)(pclk2 * 1000000) / (bound * 16);      // cal USARTDIV

         3)获取整数部分和小数部分

         获取整数和小数部分以及要写进BRR波特率寄存器的值。

	mantissa = temp;				                     // get mantissafraction = (temp - mantissa) * 16;                   // get fractionuart_brr = (mantissa << 4) | fraction;

         4) 使能时钟

         使能端口A时钟和USART1时钟。

         

           

    RCC->APB2ENR |= 1 << 2;                              // enable portA clkRCC->APB2ENR |= 1 << 14;                             // enable USART1 clk

         5)配置GPIO复用功能

         参考手册配置TX、RX的复用功能。

           

GPIOA->CRH &= 0xFFFFF00F;                             // reset portA pin9¡¢10 cfg
GPIOA->CRH |= 0x4B0;                                  // pin9 - UART1_TX pp af output pin10 - UART1_RX float input

         6)复位USART状态

        此处在开启USART前复位一下USART状态,保证USART能够彻底初始化。复位完后需要停止复位,避免USART不停复位

	RCC->APB2RSTR |= 1 << 14;                             // reset USART1RCC->APB2RSTR &= ~(1 << 14);                          // stop reset USART1

       7)配置波特率使能USART1

      

USART1->BRR = uart_brr;                               // set bound param 
USART1->CR1 |= 0x200C;                                // enable usart 8bit data no parity enable tx & rx

 三、源码

        整个代码调用情况如下:

        

void uart_init(u32 pclk2,u32 bound)
{  	 float temp;u16 mantissa;u16 fraction;u16 uart_brr;temp = (float)(pclk2 * 1000000) / (bound * 16);      // cal USARTDIVmantissa = temp;				                     // get mantissafraction = (temp - mantissa) * 16;                   // get fractionuart_brr = (mantissa << 4) | fraction;RCC->APB2ENR |= 1 << 2;                              // enable portA clkRCC->APB2ENR |= 1 << 14;                             // enable USART1 clkGPIOA->CRH &= 0xFFFFF00F;                             // reset portA pin9¡¢10 cfgGPIOA->CRH |= 0x4B0;                                  // pin9 - UART1_TX pp af output pin10 - UART1_RX float inputRCC->APB2RSTR |= 1 << 14;                             // reset USART1RCC->APB2RSTR &= ~(1 << 14);                          // stop reset USART1USART1->BRR = uart_brr;                               // set bound param USART1->CR1 |= 0x200C;                                // enable usart 8bit data no parity enable tx & rx
}

        在USART1配置完成后,将PA9、PA10接TTL转USB串口设备在主循环一直打印内容验证是否配置成功。

        在使用printf前需要做映射:

//加入以下代码,支持printf函数,而不需要选择use MicroLIB
#if 1
#pragma import(__use_no_semihosting)             
//标准库需要支持的函数               
struct __FILE 
{ int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ 
}; 
/* FILE is typedef¡¯ d in stdio.h. */ 
FILE __stdout;       
//定义  _sys_exit以避免使用半主机模式
void _sys_exit(int x) 
{ x = x; 
} 
//重定向fputc函数
//printf的输出,指向fputc, 由fputc输出到串口
//这里使用USART1输出printf信息
int fputc(int ch, FILE *f)
{      while((USART1->SR&0X40)==0);//等待上一次串口数据发送完成USART1->DR = (u8) ch;      	//写DR,串口1将发送数据return ch;
}
#endif 

相关文章:

STM32 寄存器配置笔记——USART配置 打印

一、概述 本文主要介绍如何配置USART&#xff0c;并通过USART打印验证结果。以stm32f10为例&#xff0c;将PA9、PA10复用为USART功能&#xff0c;使用HSE PLL输出72MHZ时钟 APB2 clk不分频提供配置9600波特率。波特率计算公式如下&#xff1a; fck即为APB2 clk参考计算&#xf…...

Spine深入学习 —— 数据

atlas数据的处理 作用 图集&#xff0c;描述了spine使用的图片信息。 结构 page 页块 页块包含了页图像名称, 以及加载和渲染图像的相关信息。 page1.pngsize: 640, 480format: RGBA8888filter: Linear, Linearrepeat: nonepma: truename: 首行为该页中的图像名称. 图片位…...

Debian 11.3 ARM64 安装中文语言包

文章目录 Debian 介绍1、执行命令2、语言选择3、修改设置 Debian 介绍 Debian是一种自由开源的操作系统&#xff0c;被广泛用于服务器、个人计算机和嵌入式设备。它是由全球志愿者组成的开发团队开发和维护的&#xff0c;以稳定性、安全性和自由性而闻名。 以下是一些关于Deb…...

计算机应用基础_错题集_PPT演示文稿_操作题_计算机多媒体技术操作题_文字处理操作题---网络教育统考工作笔记007

PPT演示文稿操作题 提示:PPT部分操作题 将第2~第4张幻灯片背景效果设为渐变预置的“雨后初晴”效果(2)设置幻灯片放映方式...

vue开发中遇到的问题记录

文章目录 前言1、css 即时使用了scoped子组件依然会生效2、路由配置如果出现重复name&#xff0c;只会生效最后一个&#xff0c;且前端的路由无效3、组件之间事件传递回调需要先定义emits: []&#xff0c;不然会警告提示总结如有启发&#xff0c;可点赞收藏哟~ 前言 1、css 即…...

Fiddler抓包工具不会用?点这里手把手超详细教学!

Fiddler 是一个 HTTP 协议调试代理工具&#xff0c;它能够记录并检查所有你的电脑和互联网之间的 HTTP 通讯。 Fiddler 提供了电脑端、移动端的抓包、包括 http 协议和 https 协议都可以捕获到报文并进行分析&#xff1b;可以设置断点调试、截取报文进行请求替换和数据篡改&am…...

2023年【道路运输企业安全生产管理人员】最新解析及道路运输企业安全生产管理人员复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业安全生产管理人员最新解析是安全生产模拟考试一点通总题库中生成的一套道路运输企业安全生产管理人员复审考试&#xff0c;安全生产模拟考试一点通上道路运输企业安全生产管理人员作业手机同步练习。2023…...

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步?

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f; 文章目录 【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f;一、简介软件特色演示&#xff1a; 二、使用免费群晖虚拟机搭建群晖Synology Drive服务&#xff0c;实现局域网同步1 安…...

redis运维(十八)pipeline

一 pipeline 流水线 说明&#xff1a; 这里讲解的不是jenkins的pipeline流水线这里pipeline: 管道cat redis_pipe.txt | redis-cli -a 123456 -p 6379 --raw 2>/dev/null说明&#xff1a; redis_pipe.txt 中 每行 是一个redis命令 redis为什么要提供pipeline功能 事务和…...

DBeaver连接Oracle时报错:Undefined Error

连接信息检查了很多遍&#xff0c;应该是没问题的&#xff0c;而且驱动也正常下载了&#xff0c;但是就是连不上。 找了好久&#xff0c;终于找到一个可用的方式了&#xff0c;记录一下。 在安装目录修改dbeave.ini文件&#xff0c;最后一行添加 -Duser.nameTest。重启就可以…...

Java入门基础:浅显易懂 switch

文章目录 前言一、switch二、语法三、示例四、case穿透示例 前言 switch 在开发过程中其实并不常用&#xff0c;95%以上都是用 if 而不是 switch。因为 switch 能做的 if 能做&#xff0c;switch 不能做的 if 也能做&#xff0c;而反过来就不行了。所以对于 switch 能够看懂代码…...

BW4HANA 从头到脚 概念详解 ---- 持续更新中

1. 理解BW4HANA是干嘛的 好歹干了这么久的活了&#xff0c;从当初的啥也不懂到现在感觉啥都知道点&#xff0c;虽然知道的有限&#xff0c;但是也不是小白。渐渐的也知道了SAP开发的一些逻辑。本来咱是想当个BW的大牛的。但是现在感觉这条船要沉了是怎么回事。个人才稍微摸到点…...

Navicat 技术指引 | 适用于 GaussDB 的备份与还原功能

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…...

【微服务】SaaS云智慧工地管理平台源码

智慧工地系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段&#xff0c;实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 一、智慧工地让工程施工智能化 1、内容全面&#xff0c;多维度数…...

Git使用基础总结(从小白到新手版)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…...

ck 配置 clickhouse-jdbc-bridge

背景 ck可以用过clickhouse-jdbc-bridge技术来直接访问各数据库&#xff0c;包括oracle&#xff0c;oracle也可以用jdbc&#xff0c;odbc没调研过 规划 jdbc-bridge是面向客户端的技术&#xff0c;也就是说&#xff0c;那个节点有客户端&#xff0c;哪个节点就需要&#xff…...

SpectralGPT: Spectral Foundation Model 论文翻译1

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) 摘要 ​ 基础模型最近引起了人们的极大关注&#xff0c;因为它有可能以一种自我监督的方式彻底改变视觉表征学习领域。虽然大多数基础模型…...

nuttx sim build

download nuttx: apache/nuttx: Apache NuttX is a mature, real-time embedded operating system (RTOS) (github.com) download genromfs https://github.com/chexum/genromfs make产生genromfs&#xff0c;复制到/usr/bin 编译nuttx&#xff1a; cd nuttx cmake -B b…...

c 语言中 unsigned int 类型的负数实际值大小

一 在c 语言中 unsigned int 类型的负数实际值大小 #include <stdio.h>int main() {int a 5;printf("a: %d\n", a);unsigned int b a - 10;printf("b: %d\n", b);printf("%d\n", b 4294967291); // unsigned int -5 4294967291retur…...

分块矩阵知识点整理:

1.分块方法&#xff1a;横竖线不能拐弯&#xff0c;思想为将矩阵分块看作向量计算 2.标准型 不一定是方的 特殊性&#xff1a;经过分块后会出现单位矩阵和0矩阵 3.分块矩阵的运算: 1.加减乘的运算与向量运算相同 4.分块矩阵求转置&#xff1a; 1.将子块看作普通元素求转置 2…...

魔幻C++ 函数里有函数 函数里还有函数

//函数里有函数 函数里还有函数 int fds2(){return 100; }int add(){int min2(int a,int b){if(a<b)return 123;else return 456;}int max(int a,int b){int min(int a,int b){if(a<b)return a;else return b;}return min(a*10,b*10)min2(a*10,b*10);}return 2*max(fds2…...

深入K8s网络:当Nginx遇到CoreDNS,一次搞懂Service发现与Headless Service的实战选择

深入K8s网络&#xff1a;当Nginx遇到CoreDNS&#xff0c;一次搞懂Service发现与Headless Service的实战选择 在Kubernetes集群中&#xff0c;服务发现机制如同城市的地下管网——虽然看不见&#xff0c;却决定了整个系统的连通性。当Nginx作为入口网关需要动态解析后端服务&…...

保护公司核心测试资产:CANoe CAPL脚本的3种加密方法与硬件绑定实战指南

保护公司核心测试资产&#xff1a;CANoe CAPL脚本的3种加密方法与硬件绑定实战指南 在汽车电子测试领域&#xff0c;CAPL脚本往往承载着企业多年积累的测试逻辑和专有技术。我曾亲眼见证一家供应商因测试脚本泄露导致竞品在三个月内复现其全部测试用例&#xff0c;直接造成数百…...

Windows 11终极优化指南:3步实现系统瘦身与性能飞跃

Windows 11终极优化指南&#xff1a;3步实现系统瘦身与性能飞跃 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cust…...

从刚体动力学到生物力学:MuJoCo肌腱系统的技术演进与工程实践

从刚体动力学到生物力学&#xff1a;MuJoCo肌腱系统的技术演进与工程实践 【免费下载链接】mujoco Multi-Joint dynamics with Contact. A general purpose physics simulator. 项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco 在物理仿真领域&#xff0c;从传…...

Burp Suite 2022.8.2 跨平台部署与高效启动方案全解析

1. Burp Suite 2022.8.2跨平台部署指南 作为安全测试领域的瑞士军刀&#xff0c;Burp Suite 2022.8.2版本在功能完整性和稳定性上都有了显著提升。但很多朋友在跨平台部署时总会遇到各种"玄学问题"——明明在Windows上跑得好好的&#xff0c;换到Mac或Linux就各种报错…...

如何三步构建企业级远程桌面控制平台:从零到私有化部署

如何三步构建企业级远程桌面控制平台&#xff1a;从零到私有化部署 【免费下载链接】billd-desk 基于Vue3 WebRTC Nodejs Flutter搭建的远程桌面控制、游戏串流 项目地址: https://gitcode.com/gh_mirrors/bi/billd-desk 你是否曾因远程协助软件的安全隐患而担忧&…...

Android Automotive (三)Car API:从连接到属性管理的实战解析

1. Car API基础概念与连接实战 第一次接触Android Automotive的开发者可能会被各种Manager绕晕&#xff0c;其实Car API的设计思路非常清晰——它就像车辆功能的"总开关"。想象一下&#xff0c;你要控制家里的智能设备&#xff0c;首先得连接Wi-Fi对吧&#xff1f;Ca…...

Altium Designer 20 画效果器原理图:从模块拆分到封装选择的保姆级避坑指南

Altium Designer 20 画效果器原理图&#xff1a;从模块拆分到封装选择的保姆级避坑指南 第一次用Altium Designer画电吉他效果器原理图时&#xff0c;我盯着空白的画布发呆了半小时——不是不会用软件&#xff0c;而是不知道从哪下手。直到把整个电路拆分成AMP、SWITCH等模块&a…...

小心数据被‘卷’没!玩转24C02页写时必须搞懂的地址翻转与边界检查

小心数据被‘卷’没&#xff01;玩转24C02页写时必须搞懂的地址翻转与边界检查 在嵌入式开发中&#xff0c;I2C EEPROM存储器的使用频率极高&#xff0c;而24C02作为经典型号&#xff0c;其页写功能既能提升效率又暗藏风险。许多开发者都曾遭遇过这样的噩梦&#xff1a;明明写入…...