记录
1.查找系统嘀嗒定时器,根据
《STM32F4xx-Cortex_-M4内核参考手册.pdf》来查看寄存器,
并结合core_cm4.h。
系统定时器的时钟源=21Hz,完成21000000次计数的时候,就代表说1秒时间的到达。
21000000/1000000=21,也代表说只要完成21次计数就是1微秒的时间。SysTick->LOAD决定了延时的时间。
STTM32F407为例,用寄存器写延时函数:
需要注意的是把STM32f4xx.h文件中的HSE修改为8000000,参数因子PLL_M修改为8
时钟源来源于21 Hz
最大延时时间= 2*24 1 -21000000= 798.91ms.
时钟源来源于168 Hz
最大延时时间= 2^24 -168000000= 99.86ms.
如果要实现5000ms延时的话,可以对上面进行改造,500ms的整数倍延时都可以
void delay_us(uint32_t nus)
{
int m=0,n=0;
m = nus/500;
n = nus%500;
while(m--)
{
SysTick->LOAD = (168000000/8/1000000)*500;//执行10次500us=5s
SysTick->CTRL |= 1;
while(SysTick->CTRL &(1<<16)==0)//判断定时器标志位是否达到
SysTick->CTRL &= ~1;//使能定时器
}
if(n)
{
SysTick->LOAD = (168000000/8/1000000)*n;//执行10次500us=5s
SysTick->CTRL |= 1;
while(SysTick->CTRL &(1<<16)==0)//判断定时器标志位是否达到
SysTick->CTRL &= ~1;//使能定时器
}
}
如果固定使用168000000的系统时钟,可以用SystemCoreClock来代替168000000.
关键字:STM32 内核定时器
引用地址:
STM32设置内核定时器延时us
推荐阅读最新更新时间:2024-11-11 10:48
STM32中GPIO的8中模式详解
一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 二、开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。开漏形式的电路有以下几个特点:
[单片机]
STM32芯片的存储结构
一、前言 本篇介绍STM32芯片的存储结构,ARM公司负责提供设计内核,而其他外设则为芯片商设计并使用,ARM收取其专利费用而不参与其他经济活动,半导体芯片厂商拿到内核授权后,根据产品需求,添加各类组件,生产芯片售卖。图1为STM32的组成示意图,其中Cortex-M3内核、调试系统都是ARM公司设计,内部总线、外设、存储、时钟复位等都由ST公司开发。可以明显看出总线是cpu、内存、外设传递信息的公用通道,芯片上的各个部件通过总线相连接。 图1 STM32芯片简要结构图 内核通过总线访问各个外设,现在通往外设的“路”已经铺好,还需要规定各个外设的“门牌号”,以便精准控制每个外设。ARM Cortex-M3系列的处理器,采用存储
[单片机]
STM32 USB工程的文件分析
先介绍下我参考其他工程而建立的STM32 USB工程: 简单介绍下:Startup当然放置STM32的启动文件,CMSIS放置着STM32内核ARMCortex的内核文件,StdPeripheral_Driver目录里放置着STM32外设的库函数,这几个都是STM32工程必须的,这里不仔细讲诉,User Source里放着自己的应用代码,如main.c,stm32f10x_it.c等文件都放这里。USB-FS-Driver_Driver下放着USB的库,这里暂时不讲述,我重点想分析的文件在USB-User里,这个目录主要放着一些与USB库和用户相关的文件,起着USB库与用户之间的桥梁作用,文件如下图所示,该目录包含如下文件:
[单片机]
STM32使用SWD连接报错总结
使用SWD通过J-Flash烧写STM32时,会出现各式各样的错误; 总结下原因: 1、复位脚被拉低了,这次我遇到的就是复位引脚的电容焊反了(钽电容),可以正常连接,但是烧写程序时会出现如下报错 – - Erasing affected sectors … - ERROR: RAM check failed @ address 0x20000000. - ERROR: Write: 0x03020100 07060504 - ERROR: Read: 0x00000000 00000000 - ERROR: (0 bytes of RAM have been checked successfully) - ER
[单片机]
STM32 DMA外设地址的计算问题
STM32 DMA外设地址的计算其实很简单 其实就是外设寄存器的起始地址+外设数据寄存器的地址偏移。 外设寄存器的起始地址:可以从数据手册上存储器映像查得(见2.3) 外设数据寄存器的地址偏移:就是外设数据寄存器的偏移地址(见各外设的数据寄存器)。 例如: ADC1 起始地址为0X4001 2400 ADC_DR 偏移地址0X4C。 则可得到DMA外设地址 0X4001 244C。
[单片机]
存储器系统的非对齐访问
我是之前在试验STM32G031G8U6单片机内部FLASH读操作时候发现的这个问题:STM32F103的flash数据可以从任意地址读,而STM32G031G8U6就不行,读数据地址不对齐的话会死机, 关于什么是非对齐访问,可以参考下图1,来源于CM3权威指南CH5相关内容: 图1 先说结论: 1.Cortex-M0内核不支持****非对齐访问 2.Cortex-M3内核支持非对齐访问 3.intel i5支持非对齐访问 4 .是否支持对存储器的非对齐访问取决于具体使用的内核 本次试验的完成耽误了很久,因为最近一周我得新冠了,体质差得新冠了啥也做不了。以下记录了我的 实验验证过程,过程很长, 没
[单片机]
stm32 C语言的数据类型说明
stm32编程过程经常定义变量类型,经常担心数据运算过程中 超过变量类型范围。因为在编程过程中,不同的CPU,其数据类型的意义各不相同,所以一定要注意相应变量数据类型的定义和转换,否则在计算中可能会出现不确定的错误。所以下面列出常见数据类型: 一、C语言数据类型 stm32使用的数据类型定义在 stm32f4xx.h中 整型定义: #include core_cm4.h /* Cortex-M4 processor and core peripherals */ #include system_stm32f4xx.h #include stdint.h /** @addtogroup Exported
[单片机]
STM32与S3C2440的区别
一、定位 STM32: 高功能单片机、工业控制 S3C2440: 处理器、智能设备 二、跑系统 STM32: ucos-II S3C2440: Linux等大型系统 三、硬件架构 STM32: Cortex-M3、无MMU、Flash和RAM空间小 S3C2440: ARM920T、有MMU、Flash和RAM外接空间大 四、软件结构 STM32: 程序运行空间和数据存放空间固定 S3C2440: 程序和数据都在SDRAM中 五、指令集 STM32: ARMv6的大部分指令集和ARMv7的Thumb-2指令集、指令密度更大(适宜于Flash比较小的单片机) S3C2440: A
[单片机]