第一部分STM32SYSTICK定时器:
systick 定时器按照字面意思就知道是一个简单的定时器,主要用来做延时,以避免MCU的资源浪费。
它是一个24位的倒置计数器,倒置的意思就是从最大数字递减到0,SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常,即用于中断系统。
systick有四个寄存器分别如下:
1、CTRL SysTick 控制和状态寄存器 LOAD :主要用于使能 systick定时器,异常请求,选择内部还是外部时钟,计数是否为零标志位
2、SysTick 自动重装载除值寄存器 :就是存放计数递减到零以后所自动装载的值。
3、VAL SysTick 当前值寄存器 CALIB :按照意思就可知是当前计数的值,对它写入则会清零该数值,并且把CTRL中计数是否为零的标志位也清零。
4、SysTick 校准值寄存器:一般不用
A、固件库中的Systick相关函数:
SysTick_CLKSourceConfig() //Systick时钟源选择 misc.c文件中
SysTick_Config(uint32_tticks) //初始化systick,时钟为HCLK,并开启中断
//core_cm3.h/core_cm4.h文件中
B、Systick中断服务函数:
void SysTick_Handler(void);
第二部分:端口复用和重映射
端口复用的官方解释为:
STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。
粗俗解释:就是一个端口可以有很多功能,就叫端口复用。
端口映射的解释可以理解为,一个端口根据地址的计算方式转移到另外一个端口。
关键字:STM32 SYSTICK 定时器 端口复用 重映射
引用地址:
STM32中SYSTICK定时器、端口复用和重映射
推荐阅读最新更新时间:2024-03-16 16:00
STM32 IO口模拟串口通讯
前阵子,调项目时需要用到低波特率串口通讯(300的波特率),才发下发现在正常情况下(PCLK1时钟频率为72M,PCLK2时钟频率为36M):STM32的USART0的最低波特率只能设置到1200,;而USART1最低波特率只能设置到600。怎么设置STM32的600或以下的波特率呢?有两种方法:一种是改变外设时钟频率,而另一种方法就是使用IO口模拟串口通讯。今天就来讲讲,用IO口模拟串口通信! 1、串口传输协议 首先,必须要知道串口通讯时数据是怎样传输的?这里以异步传输字符为例子,如下图所示: 一般字符传输都采用:1位起始位,8位数据位,1位停止位,没有校验位 的形式传输,其他形式的这里不讲。串口异步传输在空闲状
[单片机]
STM32系统时钟硬件仿真查看
前几天回校调试基于407的程序,以前都是在别人的程序基础上面改写只要能实现想要的功能不会管其他的,结果基本就没用用过硬件JLINK的硬件仿真,那晚蔡师姐帮忙一直弄到夜里12点多,真的很感谢她 后来师姐帮我发现那块板子的系统时钟不是原以为的时钟168MHZ。后来用107程序查看了下发现那种查看系统时钟的方法是可行的,今晚我用103也查看了下系统时钟也是所想象的72MHZ. 闲话少说,下面粘上一个简单查看当前单片机系统时钟的小技巧,希望得到更多指引 1.在主程序里面的最前面假如下面俩行代码: int main(void) { RCC_ClocksTypeDef RCC_Clocks; RCC
[单片机]
STM32 flash读写程序
static void RCC_Configuration(void); /******************************************************************** * 函数名 : main * 函数描述 : Main 函数 * 输入参数 : 无 * 输出结果 : 无 * 返回值 : 无 ********************************************************************/ int main(void) { u32 cnt = 0; u16 data = {0x0001, 0x0002, 0x0003, 0x
[单片机]
有关于stm32 串口DMA的问题
这段时间折腾了串口的DMA传输,采用3.5库给的例程序跑的好好的,移植到我的工程就不行了,实在是一件很奇怪的事情。后来在网上找了一个可以用的例程,这里吧代码贴出来 在做实验之前,首先必须明白什么是DMA,DMA的作用又体现在哪里。 DMA,即直接内存存储,在一些数据的传输中,采用DMA方式,从而将CPU解放出来。让CPU有足够的时间处理其他的事情。 stm32使用DMA的相关操作: 1、DMA的配置 要配置的有DMA传输通道选择,传输的成员和方向、普通模式还是循环模式等等。 void DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; //DMA设置
[单片机]
stm32通用定时器中断问题
在使用stm32的通用定时器定时中断的时候,发现定时器在完成初始化配置后,定时器UIF位会立刻置位,导致在使能中断后,程序会立刻进入定时器中断。 如果设计代码时不希望定时器配置完成后,立刻进入中断,可以在定时器配置完成后,立刻清除UIF标志位(TIMx- SR &= 0xFFFE) ,再使能定时器更新中断。比如用库函数这么写: TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能TIM4的更新中断 TIM_Cmd(TIM4, ENABLE); 但又发现个特别奇怪的问题,TIM_ClearITPen
[单片机]
STM32CubeMX学习笔记——STM32H743通用定时器
功能简述 主模式TIM2的中断作为从模式TIM3的时钟输入 (级联定时器) 红灯亮6灭5 频率1hz 绿灯亮3灭3 频率0.5hz STM32CubeMX配置 STM32CubeMX版本:4.27.0 配置流程: Pinout界面选择并开启需要的LED控制引脚 Clock Configuration配置时钟树 Configuration界面配置System 生成工程 Pinout配置 LED输出PIN配置,TIM2,TIM3的基本配置 Clock Configuration配置 开启系统时钟,设置TIM2、TIM3时钟(APB1) Configuration 左侧主要系统功能的开启,或中间软件层功能的开
[单片机]
STM32 TIM1输入捕获配置
最近做一个IRIG-B码对时的项目用到STM32的TIM1输入捕获功能,配置TIM1的输入捕获遇到很多坑,在这里总结下,希望对大家有帮助。 项目中用到的输入引脚为PE13,为TIM1_H3即TIM1的第3通道,这里提醒大家在使用引脚功能时最好查看引脚的重映象表,看是否要开启重映象,功能为捕获高电平脉宽,具体配置如下: 1.首先配置GPIO /* GPIO引脚配置 */ void R_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//开启引脚
[单片机]
RyanMqtt移植指南
测试环境:stm32F401RCT6、RT-Thread版本: v4.1.0、RT-Thread Studio版本: 2.2.6、网络硬件使用ec800m移植at_socket使用sal框架。 1、移植介绍 RyanMqtt 库希望应用程序为以下接口提供实现: system 接口 RyanMqtt 需要 RTOS 支持,必须实现如下接口才可以保证 mqtt 客户端的正常运行 network 接口 RyanMqtt 依赖于底层传输接口 API,必须实现该接口 API 才能在网络上发送和接收数据包 MQTT 协议要求基础传输层能够提供有序的、可靠的、双向传输(从客户端到服务端 和从服务端到客户端)的字节流 time 接口
[单片机]