使用、参考STM32标准外设库,寄存器开发的朋友也需要注意一些细节问题。
许多朋友用寄存器开发,就需要对寄存器中每一位十分熟悉才行。
但是在STM32中外设的寄存器很多,不像51这类单片机,就那么为数不多的寄存器,而且寄存器也能很容易理解。
有朋友其实已经发现,UART波特率设置太高,或太低就不能实现了。看下图波特率计算公式:
从上图可以看得出,波特率与fCK和USARTDIV。其中USARTDIV是一个无符号的定点数,这12位的值设置在USART_BRR寄存器。
结合上面图文,大家应该可以知道,波特率也是有一个范围的,而且波特率是存在误差的。
举一个例子:fCK = 36M, 波特率 = 100,那么计算出USARTDIV = 36M / 1600 = 22500.
然而,12位的数最大为4095,所以,越界了。
写这些其实希望不管你使用寄存器,还是库开发,其实都需要了解这些,避免入坑。
前面有朋友问了我关于TIM定时器的问题,说自己参考STM32标准外设库,配置定时器,但是定时却不准确。
经过交谈,他把配置代码截图给我看了。我一看,就看出问题出在预分频值上。
而这位朋友是使用STM32F407,主频168M,他想让定时器每秒计数1000个,就是上面“SystemCoreClock / 1000”。
然而,他却没有考虑溢出问题:168M / 1000 = 168K,PrescalerValue最大值为65535.
另一个关于APB1、APB2时钟问题
有朋友发现自己配置的定时会相差一倍,其实原因也是在于预分频值不对造成的。
让大家看一下下图两个预分频宏定义:
原因在于:有的TIM定时器时钟是APB1,有的是APB2。这两个时钟一般默认配置是相差一倍,所以定时也就会相差一倍。
关于TIM使用的APB时钟差异,大家可以通过查看“参考手册”RCC章节,或结合STM32Cube工具理解。
定时器RCC时钟:
定时器Cbue时钟配置:
希望大家都了解这些配置,今天暂时就写到这里,希望对你有帮助!
关键字:USART 波特率 TIM
引用地址:
关于USART波特率、TIM的外设预分频值
推荐阅读最新更新时间:2024-11-12 19:16
STM32F10x DMA介绍以及 dma usart数据收发
DMA方式 1. DMA 介绍 Direct memory access (DMA) is used in order to provide high-speed data transfer between peripherals and memory and between memory and memory. Data can be quickly moved by DMA without any CPU action. This keeps CPU resources free for other operations. The DMA controller combines a powerful dual AHB
[单片机]
stm8l15x TIM3 PWM配置
span style= white-space:pre /span CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, ENABLE); /* set SB_TX_LOCK mode: PWM mode,T = 60us, Duty Ratio: 3/4 represents send bit 1 1/2 represents send bit 0 1/4 represents a respond TIM3_Prescaler_16,and T = 60; */ GPIO_Init(SB_TX_LOCK_PORT,SB_TX_LOCK_PIN,GPIO_M
[单片机]
通信(通信方式\电平转换\波特率\串行口结构)
以下内容选自郭天祥的书籍: 串行通信方式: 串行通信的必要过程:发送时,要把并行数据变成串行数据发送到线路上去,接受时,要把串行信号再变成并行数据,这样才能被计算机及其他设备处理。 串行通信又有两种方式:异步串行通信和同步串行通信。 异步串行通信方式: 同步串行通信: TTL和RST232电平的转换: 波特率与定时器初值的关系: 也就必定很高。 串行口结构描述: 方式1的编程和实现:
[单片机]
51单片机汇编学习例程(5)——USART串口篇
5.ASM5_USART: 串口发送0-9及换行,接收任意数据并显示 /** ****************************************************************************** * @file USART.asm * @author Alex——小白 * @version V1.0 * @date 2019.9.1 * @brief 自动发送数据0-9和换行,接收的数据会打印该数据 ****************************************************
[单片机]
MPC5744p的CAN通信波特率如何计算
摘要 本篇笔记主要记录MPC5744p的CAN通信波特率计算,以及需要注意的问题 CAN 位时间 记得最早是在2015年就给大家推送过关于CAN通信波特率的设置,当时是以NXP的kinetis系列之KV46为例子来给大家介绍的,最近推送了几篇有关CAN通信的文章,后台又有人问起这个问题,今天我们就来在给大家详细普及下,今天以NXP的汽车级芯片MPC5744p的flexCAN为例,MPC系列是基于PowerPC架构的,和ARM架构的芯片时由区别的,但NXP家的PPC架构和ARM架构如果都是flexCAN的IP,那么驱动基本上可以通用,之前的文章也可供参考。 今天我们来一步步看如何在flexcan上配置can的比特率,首先要
[单片机]
STM32-USART串口通信【USART和UART的区别】
USART简介 USART(Universal Synchronous/Asynchronous Receiver/Transmitter),即通用同步/异步串行接收/发送器。 所谓同步通信和异步通信的主要区别是前者有公共时钟,总线上的所有设备按统一的时序、统一的传输周期进行信息传输。后者没有公共时钟,没有固定的传输周期,采用应答方式通信。简单的说,“同步”就是发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 “异步”就是发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。异步通信发送方式下,在每一个字符的开始和结束分别加上开始位和停止位,以便使接收端能够正确地将每一个字符接收来。 我们用
[单片机]
STM32-(22):定时器TIM(理论)
STM32系列的CPU,有多达8个定时器。 1、 其中TIM1和TIM8是能够产生三对PWM互补输出的髙级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。 2、 其它6个为普通定时器,时钟由APB1的输出产生。 定时器的作用: 1、 定时功能 2、 计数功能 3、 输入捕获 4、 匹配输出 5、 PWM咏冲波 1、功能描述. 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。 它适用于多种场合,包括测量输入信号的脉冲长度(输入采集)或者产生输出波形(输 出比较和PWM)。 定时器是完全独立的,而且没有互相共享任何资源。 定时器还可以与定时器形成级联,组建更大的定时范围。 NOTE:只要你使用默认的
[单片机]
通过学习USART1深入STM32F107VCT6的串口通信
STM32有数个串口,每个串口都有一个自己独立的波特率寄存器USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的,由于STM32采用分数波特率,所以STM32的串口波特率设置范围很宽,而且误差很小。 在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。还可以使
[单片机]