- 博客(28)
- 收藏
- 关注
原创 STM32F407——RTC实时时钟
实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC 还包含用于管理低功耗模式的自动唤醒单元。两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时( 12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、 29(闰年)、 30 和 31 天。并且还可以进行夏令时补偿。
2025-03-16 23:59:30
752
原创 STM32F407 SPI通信
Flash 是常见的用于存储数据的半导体器件, 它具有容量大、可重复擦写、按“扇区/块” 擦除、掉电后数据可继续保存的特性。常见的 Flash 主要有 NOR Flash 和 Nand Flash 两种类型。NOR 与 NAND 在数据写入前都需要有擦除操作,但实际上 NOR Flash 的一个 bit 可以从 1变成 0,而要从 0 变 1 就要擦除后再写入, NAND Flash 这两种情况都需要擦除。
2025-03-15 08:00:00
1988
原创 STM32F407 IIC通信
* 定义 I2C 引脚 *//* I2C SDA 或 SCL 引脚拉高或拉低 *//*** @brief 初始化 I2C 引脚* @param 无* @retval 无*//* 使能时钟 *//* 配置 I2C 引脚 *//* 设置引脚为输出模式 *//* 设置引脚为上拉方式 *//* 设置引脚速率为50MHz *//* SCL 配置为推挽输出(强驱动) *//* 设置 IIC 的 SCL 引脚 *//* 设置 SCL 为推挽输出 */
2025-03-14 20:00:00
1816
原创 STM32F407 定时器
包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制到几毫秒。高级控制定时器(TIM1 和 TIM8)和通用 (TIMx) 定时器彼此完全独立,不共享任何资源。高级控制定时器部分框图:通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。它们可用于多种用途,包括测量输入信号的脉冲宽度(输入捕获)或生成输出波形(输出比较和 PWM)。
2025-03-13 00:00:00
1202
原创 STM32F407 独立看门狗和窗口看门狗
独立看门狗本质上是一个定时器,这个定时器有一个输出端,可以输出复位信号。该定时器是一个 12 位的递减计数器,从初始值递减至 0 时出发复位。如果在计数没减到 0 之前,通过重载值(IWDG_RLR)刷新计数器,那么就不会产生复位信号,这个动作称为喂狗。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍然可以工作,并且其时钟源为独立低速时钟 LSI (约 32kHz),不受主时钟故障的影响。下图就是独立看门狗的框图:系统整体运行监控,防止死循环或程序卡死。对喂狗时间无严格要求,但需高可靠性。
2025-03-12 07:30:00
834
原创 STM32F407 串口通信
异步通信是不需要时钟信号的,但是这里需要约定好两个设备的波特率。波特率表示每秒钟传送的码元符号的个数,所以它决定了数据帧里面每一个位的时间长度。两个要通信的设备的波特率一定要设置相同,我们常见的波特率是 4800、9600、 115200 等。如果波特率不匹配,将会在造成数据接收乱码或无法接收数据。
2025-03-11 23:00:00
2002
原创 STM32F407VET6简介
以上即是 STM32 系列 MCU 的命名规则,如我使用的 STM32F407VET6, 就是高性能、带DSP 与 FPU,100 脚,闪存容量为 512K,LQFP100 封装,-40~85 度的工业级的32位单片机。
2025-03-11 17:48:30
916
原创 STM32F407 NVIC和外部中断
中断是异常的一种。异常是会改变程序流的事件,当其产生时处理器会暂停当前正在执行的任务,转而执行一段被称作异常处理的程序。在异常处理完毕后,处理器会继续正常执行程序指令。中断一般由外设或外部输入产生,又是也可以由软件触发。中断的异常处理也被称作中断服务程序 (ISR)。如下表中的 Cortex-M4 微控制器的中断源为系统异常。如下表以及表以后的类型的中断源均为外部中断输入。全表请去参照“STM32F4xx参考手册”。STM32F407 的中断向量表在 stm32f4xx.h文件中被定义。
2025-03-10 00:00:25
1149
原创 STM32——GPIO介绍
STM32F4 每组通用 GPIO 口都有 7 个 32 位寄存器控制,包括:4 个 32 位配置寄存器(MODER、OTYPER、OSPEEDR 和 PUPDR)2 个 32 位数据寄存器(IDR 和 ODR)1 个 32 位置位/复位寄存器(BSSR)1 个 32 位锁定寄存器(LCKR)2 个 32 位复用功能选择寄存器(AFRH 和 AFRL)/*!/*!/*!/*!/*!/*!/*!/*!/*!
2025-03-08 18:39:20
2229
原创 STM32时钟系统
STM32F407 的时钟系统时核心功能之一,负责为 CPU、外设及总线提供高效稳定的时钟信号。其设计是基于——时钟树结构,支持多时钟源、灵活分频 / 倍频设置。STM32F407的时钟树结构如下图所示。
2025-03-07 22:00:00
787
原创 C语言——位操作运算
位操作是 C 语言中直接对二进制位进行运算的底层操作,在系统编程、嵌入式开发、算法优化等领域有重要应用。C语言提供了 6 个位操作运算符,这些运算符只能作用于整型操作数,也就是只能作用于带符号或无符号 char、short、int、long 类型。由于 C 语言中 printf 没有输出二进制形式数据的格式,所以首先自定义一个打印二进制形式数据的函数print_binary。还有一点,要了解有符号数在计算机中存储形式, 在计算机中数值一律以二进制补码的形式储存。
2025-03-07 14:15:53
1152
原创 CubeMX创建STM32F407工程
待生成完成后,可以选择 Open Folder 打开工程目录;也可以选择 Close, 然后手动打开工程目录。引脚工作模式在设置为 GPIO_Output 后,参数将默认:推挽输出、初始化后输出低电平。如果未使能,配置时钟树时就无法选择HSE作为时钟源。点击软件右上角的“CENERATE CODE”按钮,即可开始按配置生成工程。开发板上蓝色 LED 使用的是PB2引脚,给PB2置低电平,即可通路点亮LED。编写测试代码,让PB2连接的B_LED闪烁。编译无误后即可下载进开发板中验证。
2025-03-04 22:20:24
242
原创 C语言——文件操作
C语言通过标准库函数实现文件操作,基于文件指针(FILE*)进行读写。文件指针指向一个包含文件信息的结构,这些信息包括:缓冲区的位置、缓冲区中当前字符的位置、文件的读或写状态、是否出错或是否已经达到文件结尾等等。用户不需关注这些细节,因为<stdio.h>中已经定义了一个包含这些信息的结构FILE。在程序中只需按照下列方式声明一个文件指针即可:FILE* fp;
2025-03-02 13:39:39
1099
原创 C语言——结构体
struct 结构体名 {数据类型 成员1;数据类型 成员2;// ...关键字struct引入结构声明。结构声明由包含在花括号“{ }”内的一系列声明组成。关键字struct后面的名字是可选的,称为结构标记。结构标记用于给结构命名,在定义之后,结构标记就代表花括号内的声明,可以用它作为该声明的简写形式。一定要注意,花括号后面还有一个分号“;结构中定义的变量称为成员。结构成员、结构标记和普通变量可以采用相同的名字,它们之间不会冲突,因为可以通过上下文分析对它们进行区分。
2025-03-01 08:00:00
932
原创 C语言实现双向链表
* 定义双向链表节点结构体 */int data;/* 数据域 *//* 前驱指针 *//* 后继指针 *//* 定义双向链表 *//* 头指针 *//* 尾指针(可选,非必须) */
2025-02-27 21:00:00
1026
原创 C语言实现单链表
/ 定义链表节点结构体int data;/* 数据域(存储节点数据) *//* 指针域(指向下一个节点的指针) */} ListNode;定义链表节点结构体struct ListNode,并赋予别名ListNode,故后续代码出现的ListNode可代表struct ListNode。结构体中定义了data存储节点的数据,用struct ListNode*定义了next来存储指向下一节点的指针。
2025-02-26 19:16:35
1285
原创 C++基础
<<”是预定义的插入符,作用在流类对象cout上便可以实现一般的屏幕输出。// 输出hello world!" << endl;" << endl;“>>”是预定义的提取符,作用在流类对象cin上便可实现一般的键盘输入。// 输入a,b的值,中间需以空格分隔int a, b;
2025-02-19 20:00:00
912
原创 FreeRTOS内存管理
使用FreeRTOS创建任务、队列、信号量时有两种方法,一种是静态创建,由用户自定义所需的RAM;另外一种是动态地申请所需的RAM。内存碎片是伴随着内存申请和释放而产生的。如下图所示:内存碎片是内存管理算法中需要重点解决的一个问题,否则实际可用内存会越来越少,最终应用程序会因为分配不到合适内存而崩溃。
2025-02-18 10:35:08
971
原创 FreeRTOS任务栈
简单地说,栈溢出就是用户分配的栈空间不够用了。以一个简单的实力来分析栈的生长方向从高地址向低地址生长。图中(1)的位置是RTOS的某个任务调用了函数test()前的SP栈指针位置。int i;图中(2)的位置是调用函数test()所需要保存的返回地址的栈空间。这个一步不是必需的,对于Cortex-M3和Cortex-M4内核是将其保存到LR寄存器中,如果LR寄存器中保存了上一级函数的返回地址,则需要将LR寄存器中的内容先入栈。
2025-02-17 07:00:00
1104
原创 FreeRTOS时间管理
用户如果需要使用此功能,那么需要将configUSE_TICK_HOOK宏定义为1。时间片轮转回调函数在xTaskIncrementTick()函数中被调用。但因该函数在PendSV_Handler()中断函数中被调用,所以时间片轮转回调函数执行的时间必须很短。时间片的长度是由FreeRTOSConfig.h文件中的宏configTICK_RATE_HZ来确定的,一个时间片的长度就是滴答定时器的中断周期,假如configTICK_RATE_HZ设置为1000,就代表一个时间片的长度是1ms。
2025-02-16 12:37:15
985
原创 FreeRTOS中断配置、任务优先级和临界区
此宏定义用于配置STM32F4的8位优先级设置寄存器实际使用的位数。在STM32F4开发板中,中断优先级寄存器是8位寄存器,也就是说,可以设置256级中断,在实际应用中不适用那么多中断优先级,所以只是用了高4位,低4位取零。在实际使用中一般宏定义为4,表示使用优先级寄存器的高4位。此宏定义用于设置FreeRTOS用到的SysTick中断和PendSV中断的优先级。在NVIC分组设置为4时,此宏定义的范围就是0~15,即专门配置抢占优先级。
2025-02-16 07:30:00
2128
原创 FreeRTOS任务管理
vTaskList()调用uxTaskGetSystemState(),然后将uxTaskGetSystemState()生成的原始数据格式化为可读的表,该表显示每个任务的状态,包括任务的堆栈剩余空间。在freertos_demo.c中创建两个任务:任务vTaskLED1完成R_LED闪烁的功能,任务vTaskLED2完成B_LED闪烁的功能。和B_LED循环闪烁10次后R_LED熄灭而B_LED常亮,此时意味着vTaskLED任务被删除,然后按一下定义的按键,会发现LED又会呈现之前的效果。
2025-02-15 21:00:00
708
原创 FreeRTOS任务基础知识
在单片机(无操作系统)开发中一般采用裸机编程,应用程序是一个无限的循环(应用程序在一个while(1)循环中运行),循环中调用相应的函数完成相应的操作,可将这一部分看作后台行为;中断服务程序处理异步事件,可将这一部分看作前台行为。后台也可以称作任务级,前台可称作中断级,这就是前后台系统,也可称作单任务系统。单任务系统编程思路:对于简单应用,处理器可以查询数据或者消息是否就绪。就绪后进行处理,然后等待,如此循环下去。
2025-02-15 08:00:00
954
原创 STM32F407移植FreeRTOS
FreeRTOS是一个免费的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。
2025-02-14 17:18:38
1555
原创 IAR创建STM32F407工程
(1)IAR软件;(2)STM32F4系列标准库包;(3)准备如下一个文件夹,我命名为IAR_STM32F407;在CMSIS文件夹中添加如下文件:IAR文件夹是用来存放IAR工程的。
2025-02-13 12:03:46
572
1
原创 社区版IDEA手动maven配置springboot
下载到本地之后,解压到一个没有中文路径的文件夹中:(1)bin文件夹:存放的可执行文件,与编译、测试、打包等功能相关,属于maven的运行指令。(2)conf文件夹:存放maven的配置文件,例如配置maven的本地仓库、阿里云的私服都需要在settings.xml配置文件中进行配置。(3)lib文件夹:存放maven所依赖的jar资源,因为maven是基于Java语言开发的。
2025-02-12 14:16:24
946
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人