- 博客(199)
- 收藏
- 关注
原创 HAL_SysTick
SysTick:系统定时器,24位,只能递减,存在于内核,嵌套在NVIC中,所有的Cortex-M3内核的单片机都具有这个定时器。系统定时器是一个24bit的向下递减的计数器, 计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK等于72M。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。SysTick 就是 STM32 内部的一个24 位倒计时定时器,属于 Cortex-M 内核自带,每个 STM32 都有。
2026-04-03 09:53:26
357
原创 HAL_EXTI
EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置, 可以单独配置为中断或者事件,以及触发事件的属性。EXTI可分为两大部分功能,一个是产生中断12345 ,另一个是产生事件 123678。
2026-04-02 16:46:18
386
原创 HAL_GPIO
GPIO :General Purpose Input Output,通用输入输出引脚,是 MCU 与外部世界交互的最基本接口。STM32F103 一般有 GPIOA ~ GPIOG,每组 16 个引脚(Pin0 ~ Pin15)。
2026-04-02 15:02:44
440
原创 HAL_NVIC
NVIC:Nested Vectored Interrupt Controller嵌套向量中断控制器,整个芯片的中断管理员。NVIC 是 Cortex‑M3 内置的中断硬件管理器。用于表达优先级的4bit,又被分组成抢占优先级和子优先级。如果有多个中断同时响应,抢占优先级高的就会抢占抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高。
2026-04-02 09:36:11
559
原创 HAL_RCC
RCC :Reset Clock Control 复位和时钟控制器。外部 / 内部时钟 → PLL 倍频 → 系统时钟 SYSCLK → 分频到 AHB/AHB1/APB1/APB2 → 各个外设。
2026-04-01 12:04:16
480
原创 HAL_新建工程(手动移植)
进入\STM32Cube_FW_F1_V1.8.0\Drivers\STM32F1xx_HAL_Driver 把头文件夹 Inc 和源文件夹 Src 移动到自己的Libraries的对应的文件中。把自己的Libraries文件中的Include 文件中的stm32f1xx_hal_conf_template.h 更名为 stm32f1xx_hal_conf.h。3)、再进入\CMSIS\Device\ST\STM32F1xx\Include 把所有文件拷贝到自己的CMSIS/Include文件中。
2026-03-23 17:19:20
411
原创 HAL_HAL库简介
文件夹下是HAL库帮助文档,主要讲述如何使用驱动库来编写自己的应用程序。文件夹下是官方的CMSISI库,HAL库,板载外设驱动。中间件,包含ST官方的STemWin、 STM32_Audio、STM32_USB_Device_Library、STM32_USB_Host_Library;也有第三方的fatfs文件系统等等。文件夹下是用驱动库写的针对官方发行demo板的例子和工程模板。实用的公用组件比如LCD_LOG实用液晶打印调试信息。库的版本更新说明。
2026-03-23 15:20:42
387
原创 HAL_通用规则
扩展模型由一个额外的文件组成,即stm32f1xx_ha_ppp_ex.c,其中包含所有特定功能和定义语句(stm32f1xx_hal_ppp_ex.h)给定零件号的。IO操函数: HAL_PPP_Read(), HAL_PPP_Write(), HAL_PPP_Transmit(), HAL_PPP_Receive()。状态和错误函数:HAL_PPP_GetState(),HAL_PPP_GetError()。初始化和去初始化函数:HAL_PPP_Init(),HAL_PPP_Delnit()。
2026-03-23 11:50:01
636
原创 STM32_ADC_寄存器操作
地址偏移:0x00 复位值:0x0000 0000 地址偏移:0x04 复位值:0x0000 0000 地址偏移:0x08 复位值:0x0000 0000 地址偏移:0x0C 复位值:0x0000 0000 地址偏移:0x10 复位值:0x0000 0000 地址偏移:0x14-0x20 复位值:
2026-03-21 10:45:23
476
原创 STM32_ADC_模数转换器
ADC(ANalog-Digital Converter)模拟-数字转换器;ADC可以将引脚上连续变化的模拟电压转化为内存中存储的数字变量,建立模拟电路到数字电路的桥梁;12为逐次逼近型ADC,1us的转换时间(转换频率为1MHZ);输入电压范围0~3.3V,转换结果范围:0 ~ 4095;
2026-03-21 09:20:54
360
原创 STM32_DMA_寄存器操作
1. 在DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是数据传输的源或目标。2. 在DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数据将从这个地址读出或写入这个地址。3. 在DMA_CNDTRx寄存器中设置要传输的数据量。在每个数据传输后,这个数值递减。4. 在DMA_CCRx寄存器的PL[1:0]位中设置通道的优先级。
2026-03-20 11:15:21
391
原创 STM32_DMA_直接存储器访问
外设要想通过DMA来传输数据,必须先给DMA控制器发送DMA请求,DMA收到请求信号之后,控制器会给外设一个应答信号, 当外设应答后且DMA控制器收到应答信号之后,就会启动DMA的传输,直到传输完毕。它设定DMA_CCR寄存器的DIR[1:0]位的值。DMA有DMA1和DMA2两个控制器,DMA1有7个通道,DMA2有5个通道,不同的DMA控制器的通道对应着不同的外设请求。DMA具有12个独立可编程的通道,其中DMA1有7个通道,DMA2有5个通道,每个通道对应不同的外设的DMA请求。
2026-03-20 10:11:17
418
原创 STM32_USART_寄存器操作
地址偏移:0x00 复位值:0x00C0 地址偏移:0x04 复位值:不确定 注意: 如果TE或RE被分别禁止,波特计数器停止计数 地址偏移:0x08 复位值:0x0000 地址偏移:0x0C 复位值:0x0000 地址偏移:0x10 复位值:0x0000 地址偏移:0x14
2026-03-19 16:35:19
482
原创 STM32_USART_串口通信
默认使用1个停止位。USART数据寄存器(USART_DR)只有低9位有效,并且第9位数据是否有效要取决于USART控制寄存器1(USART_CR1)的M位设置, 当M位为0时表示8位数据字长,当M位为1表示9位数据字长,我们一般使用8位数据字长。奇偶校验控制选择,可选USART_Parity_No(无校验)、USART_Parity_Even(偶校验)以及USART_Parity_Odd(奇校验),它设定USART_CR1寄存器的PCE位和PS位的值。它设定USART_CR2寄存器的CPOL位的值。
2026-03-19 15:20:12
415
原创 STM32_TIM_寄存器操作
开时钟→关定时器→配功能(中断 / PWM / 捕获)→配分频 / 重装值→开中断 / NVIC(若需)→开定时器;定时中断需清除UIF标志,PWM 需配置复用 GPIO + 输出使能,输入捕获需处理溢出;高级定时器需额外配置BDTR寄存器(死区 + 主输出使能),这是与通用定时器的核心区别。
2026-03-19 10:44:12
808
原创 STM32_TIM_定时器
STM32 定时器是嵌入式开发中最常用的外设之一,功能涵盖定时中断、PWM 输出、输入捕获、输出比较等。 定时器时钟 TIMxCLK,即内部时钟 CK_INT,经 APB1预分频器后分频提供,如果APB1 预分频系数等于 1,则频率不变, 否则频率乘以 2,库函数中 APB1预分频的系数是2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M。 定时器时钟经过 PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数。 PSC是一个16
2026-03-18 15:31:33
330
原创 STM32_SysTick_寄存器操作
SysTick(系统滴答定时器)是 Cortex-M 内核自带的外设,无需依赖 STM32 片上外设,常用来实现精准延时、系统心跳(如 RTOS 时钟节拍)。
2026-03-18 09:58:13
277
原创 STM32_SysTick_系统定时器
系统定时器是一个24bit的向下递减的计数器, 计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK等于 72M。系统定时器是一个24bit的向下递减的计数器, 计数器每计数一次的时间为1/SYSCLK。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。CLK= 72M时,t = (72)*(1/72M) = 1us。清除当前数值寄存器的值。设置重装载寄存器的值。
2026-03-18 09:43:54
744
原创 STM32_外部中断_寄存器操作
复位值:0x0000 0000。复位值:0x0000 0000。复位值:0x0000 0000。复位值:0x0000 0000。复位值:0x0000 0000。复位值:0xXXXX XXXX。复位值:0x0000 0000。复位值:0x0000 0000。复位值:0x0000。复位值:0x0000。复位值:0x0000。
2026-03-18 09:20:19
343
原创 STM32_NVIC_中断控制
中断和事件都是处理系统中异常情况的方法,但它们的触发方式和处理方式不同。中断通常由硬件设备或外部信号引起,需要快速处理以免影响系统性能。事件则通常由软件或应用程序引发,可以在后台执行以免阻塞用户界面或影响应用程序性能。用于表达优先级的4bit,又被分组成抢占优先级和子优先级。如果有多个中断同时响应,抢占优先级高的就会抢占抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高。
2026-03-17 21:13:56
396
原创 STM32_时钟树_寄存器操作
但在APB2总线上的外设被访问时,将插入等待状态直到APB2的外设访问结束。注: 当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是0x0。访问: 无等待状态, 字, 半字 和字节访问。访问: 0到2个等待周期,字,半字和字节访问。访问:无等待周期, 字, 半字 和字节访问。访问:无等待周期, 字, 半字 和字节访问。访问:无等待周期, 字, 半字 和字节访问。访问:0到3等待周期,字、半字和字节访问。访问:0到3等待周期,字、半字和字节访问。访问:无等待周期,字, 半字和字节访问。
2026-03-17 10:18:33
836
原创 STM32_时钟树
Cortex系统时钟由HCLK 8分频得到,等于9M, Cortex系统时钟用来驱动内核的系统定时器SysTick,SysTick一般用于操作系统的时钟节拍,也可以用做普通的定时。当确定PLL时钟来源的时候,HSE可以不分频或者2分频, 这个由时钟配置寄存器CFGR的位17:PLLXTPRE设置,我们设置为HSE不分频。独立看门狗的时钟由LSI提供, 且只能是由LSI提供,LSI是低速的内部时钟信号,频率为30~60KHZ直接不等,一般取40KHZ。HSE故障时,系统会自动切换HSI作为系统时钟。
2026-03-09 10:28:21
566
原创 STM32_GPIO_HAL库操作
_HAL_GPIO_EXTI_GET_FLAG 检查指定的EXTI行标志是否设置。__HAL_GPIO_EXTI_CLEAR_FLAG 清除EXTI的行挂起标志。__HAL_GPIO_EXTI_GET_IT 检查指定的EXTI行是否被断言。__HAL_GPIO_EXTI_CLEAR_IT 清除EXTI的行挂起位。__HAL_GPIO_EXTI_GENERATE_SWIT 在选定的情况下生成软件中断。
2026-03-07 17:13:05
570
原创 STM32_GPIO_标准库操作
防止重复包含的处理/*此处省略头文件的具体内容*/使能GPIO端口时钟;初始化GPIO目标引脚为输入模式(浮空输入);编写简单测试程序,检测按键的状态,实现按键控制LED灯。
2026-03-07 16:43:05
523
原创 STM32_GPIO结构及工作模式
(2)一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。(3)开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出接地, 若控制输出为1 (它无法直接输出高电平)时,则P-MOS管和N-MOS管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。
2026-03-06 10:37:26
688
原创 STM32_烧录调试
例如,使用TIM2的通道1输出一个PWM波,这里需要注意,要在View菜单中勾选Periodic Window Update,不然只有在程序暂停的时候才会更新波形 滚动鼠标滚轮,可以调节波形的大小,上面的图中grid的值为0.5ms,表示一格为0.5ms;⑥Watch Windows,有Watch1和Watch2,主要用来显示变量和数组或者结构体变量的值和类型,需要将其手动添加到watch窗口,才能显示(Watch窗口除了能查看变量的值,还能修改变量的值)程序通常分成两块,分别为引导程序和应用程序。
2026-02-12 10:53:27
1160
原创 STM32_CubeMx项目结构
定义了在HAL驱动下使用的外设模块(包含进了所需的外设头文件)、时钟频率、系统配置参数等。用户定义的应用程序代码(在这里调用HAL_init()函数可以把芯片复位)按照用户的配置来定义引脚、时钟使能、配置MDA和中断等的初始化代码。用户应用程序中的基本宏定义,如在Cube里定义的常量、引脚。按照用户的配置来定义引脚、时钟使能、配置MDA和中断等的初始化代码。内部的文件提供了对Cortex-M3处理器内核的支持。外设的驱动源文件和头文件(即固件库的主要部分)。由用户编写的中断服务函数。
2026-02-10 15:51:15
588
原创 STM32_新建工程(CubeMx版)
和我们配置库函数的时候基本一样,但是 STM32CubeMx将这些转换为了图形和选项 ,我们配置的时候不用再去配置各种东西,只需要傻瓜式操作便可以配置我们需要的外设 这便是CubeMx的核心所在。如果你是设计产品想要选择一款芯片 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核,型号,等等,帮助你找到适合的芯片。接着选择Project Manager选项,配置工程的名称,路径,使用的IDE工具,堆栈大小。例:串口:选择串口的模式(异步,同步,半双工) 串口接收中断,和串口DMA传输等等。
2026-02-10 15:11:20
1441
原创 STM32_CubeMx安装
打开安装好的 STM32CubeMX 软件 点上面的Help -> Manage embedded software packages。Help -> Manage embedded software packages ->From Local 选择离线包即可。会跳出来一个选择型号界面 勾选上你要安装的HAL库, 点击“Install Now” 直到安装成功。HAL库 STM32 HAL固件库 ST官方推出的另一套库。到此,恭喜你的STM32 CubeMx安装成功了。解压到相对应路径即可。
2026-02-10 11:33:43
643
原创 STM32_Compiler5.06安装
在 “Keil的安装路径” 下的 “ARM” 目录中创建一个 “ARMCC” 目录,用于安装 ARM Compiler 5 编译器。注意:需要将安装路径 “Keil的安装路径” 下的 “ARM” 目录下,否则会找不到 License 路径。将下载的压缩包 “ARMCompiler_506_Windows_x86_b960” 解压。按如下文件夹目录顺序,进入 “setup.exe” 安装程序。安装路径中不要包含中文,防止编译时出现异常报错。注意:记住安装的位置!一定要打开工程项目!至此添加编译器完成!
2026-02-09 16:51:47
1044
原创 STM32_标准库启动文件startup_stm32f10x_hd.s详解
相当于C语言的函数声明。__main 其实不是我们定义的(不要与C语言中的main函数混淆),这是一个C库函数,当编译器编译时,只要遇到这个标号就会定义这个函数, 该函数的主要功能是:负责初始化栈、堆,配置系统环境,并在函数的最后调用用户编写的 main 函数,从此来到 C 的世界。如果我们在使用某个外设的时候,开启了某个中断,但是又忘记编写配套的中断服务程序或者函数名写错,那当中断来临的时, 程序就会跳转到启动文件预先写好的空的中断服务程序中,并且在这个空函数中无线循环,即程序就死在这里。
2026-02-09 16:31:06
1009
原创 STM32_新建工程(标准库版)
在Output选项卡中把输出文件夹定位到我们工程目录下的“output”文件夹, 如果想在编译的过程中生成hex文件,那么那Create HEX File选项勾上。为了告诉STM32标准库,我们使用的芯片类型是STM32型号是大容量的,使STM32标准库根据我们选定的芯片型号来配置。在C/C++选项卡中添加处理宏及编译器编译的时候查找的头文件路径。添加宏,就相当于我们在文件中使用“#define”语句定义宏一样。Listing和Output工程会自动建立。STARTUP: 启动文件。USER :用户文件。
2026-02-09 09:49:22
665
原创 STM32_标准库结构
其中包含用于访问内核寄存器的名称,地址定义,主要由ARM公司提供。 提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。 文件夹下是驱动库的源代码及启动文件,这个非常重要,我们要使用的固件库就在这个文件夹里面。 文件夹下是用驱动库写的例子和工程模板,其中那些为每个外设写好的例程对我们非常有用, 我们在学习的时候就可以参考这里面的例程,非常全面,简直就是穷尽了外设的所有功能。 包含了基于ST官方实验板的例程,不需要用到,略过即可。
2026-02-08 16:12:07
859
原创 STM32_新建工程(寄存器版)
2)Output选项卡中把输出文件夹定位到我们工程目录下的output文件夹, 如果想在编译的过程中生成hex文件,那么那Create HEX File选项勾上。启动文件,系统上电后第一个运行的程序,由汇编编写,C编程用的比较少,可暂时不管,这个文件从固件库里面拷贝而来,由官方提供。3)在Listing选项卡中把输出文件夹定位到我们工程目录下的Listing文件夹。用户手动新建,用于存放寄存器映射的代码,暂时为空。用户手动新建,用于存放main函数,暂时为空。
2026-02-08 15:26:37
830
原创 STM32_开发环境
把下载好的包双击安装即可,安装路径选择跟KEIL5一样的安装路径,安装成功之后,在KEIL5 的 Pack Installer 中就可以看到我们安装的包,以后我们新建工程的时候,就有单片机的型号可选。Core一栏的路径指的是MDK-ARM软件的安装根路径,后面我们还要安装芯片包,Pack一栏的路径指的就是芯片包的安装路径。如果要修改路径的话,路径不能带中文,然后点 Next。全部填空格(键盘的space键)即可,Next。程序首次运行会提示,把勾选取消。下载好芯片包后,使用安装即可。
2026-02-07 09:47:20
489
原创 STM32_内存映射
给有特定功能的内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。给存储器分配地址的过程叫存储器映射,再分配一个地址叫重映射。/*使用GPIO_TypeDef把地址强制转换成指针*/
2026-02-06 15:14:27
1041
原创 STM32_内部结构
FSMC的英文全称是Flexible Static Memory Controller,叫灵活的静态的存储器控制器,是STM32F10xx中一个很有特色的外设,通过FSMC,我们可以扩展内存,如外部的SRAM,NAND-FLASH和NORFLASH。这样可以在数据传输过程中解放 CPU,使其能够执行其他任务,从而提高系统的整体性能,数据在DMA控制器下进行的数据传输过程中,CPU 可以继续执行其他指令,而不必等待数据传输的完成,不受数据传输过程的干扰。数据段的大小在编译时确定,包含所有已初始化的全局变量。
2026-02-05 19:27:50
1009
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1