- 博客(14)
- 收藏
- 关注
原创 STM32 HAL库 flash的读写
本文介绍了一个针对STM32F1系列芯片的Flash读写操作程序。该程序实现了安全读写任意Flash地址的功能,包含读取uint8_t、uint16_t、uint32_t类型数据的接口,以及一个通用的写入函数。程序定义了Flash的起始地址(0x08000000)、页大小(1024字节)和总页数(64页)等参数,并进行了严格的地址边界检查。写入操作支持非对齐地址处理,会自动处理未对齐的头部数据,并实现了必要的擦除检查机制。所有操作都包含解锁/加锁机制,确保Flash操作的安全性。
2025-12-09 10:39:09
168
原创 rust格式化打印
Rust的std::fmt模块提供了文本格式化与打印功能,包含7个核心宏用于不同场景,如format!生成字符串、print!/println!输出到终端等。通过Display和Debug等格式化特质,可自定义类型输出方式。模块支持多种格式化选项,如二进制、十六进制显示,以及精度控制等。开发者可通过自动派生或手动实现这些特质来满足不同需求,确保类型安全且灵活的格式化输出。
2025-11-03 11:46:21
826
原创 openocd在keil中一键下载hex文件
本文介绍了在Keil中通过修改Download按键功能直接调用openOCD下载HEX/BIN文件的方法。通过在Utilities设置中配置自定义命令,将openOCD终端指令嵌入Download按钮,实现一键下载功能。具体步骤包括:1)修改Download按键配置;2)在魔法棒选项中填入openOCD指令,包含芯片配置文件、擦除地址、编程文件路径等参数。该方法避免了单独运行终端的繁琐操作,提高了开发效率。文章还建议读者可复制CMD指令询问AI以了解具体参数含义。
2025-10-16 15:45:18
255
原创 程序编译之后计算大小分别对应的意义
该摘要解释了ARM嵌入式开发中程序内存段的划分及其存储位置。Code(代码段)和RO-data(只读数据段)存储在Flash中,运行时也不变;RW-data(初始化非零的读写数据段)初始值存于Flash,运行时复制到RAM;ZI-data(零初始化数据段)不占Flash,运行时在RAM中清零分配。Flash容量需容纳Code+RO-data+RW-data初始值,RAM需满足RW-data+ZI-data的运行需求,否则会溢出。
2025-10-11 09:46:02
603
原创 STM32 HAL 不重置SysTick的精准微秒级延时
这段代码实现了一个基于STM32的精确延时系统,主要功能包括: 通过delay_init_com()函数初始化延时系统,获取系统时钟频率并计算SysTick定时器每微秒的计数值 提供微秒级延时delay_us()和毫秒级延时delay_ms()函数,其中微秒延时通过监控SysTick计数器的值变化来实现精确计时 包含一个简单的循环延时loop_delay_ms()作为基础延时方案 在main.c中应用延时功能实现LED闪烁示例 该方案适合需要微秒级别精确延时的应用场景,通过SysTick定时器实现较高的时间
2025-09-03 16:27:31
167
原创 调用HAL_TIM_PWM_Stop后对应管脚的电平状态
这个 空闲状态 / 关闭状态电平 就是在初始化 PWM (HAL_TIM_PWM_Init) 后,并在启动 PWM (HAL_TIM_PWM_Start) 前,通过 HAL_TIM_PWM_ConfigChannel函数(或者配置 TIM_OC_InitTypeDef结构体并调用 HAL_TIM_PWM_ConfigChannel) 时指定的 TIM_OCPOLARITY 设置所决定的反相状态。当 CCxE被清零后,定时器通道的输出引脚不再由定时器的 PWM 生成逻辑控制。
2025-08-19 11:24:10
397
原创 记录移植rt-thread nano到MDK的过程
main函数,前面的context_rvds.s汇编已经改变了程序的启动入口函数,main函数不是第一个启动的函数了,但是最后还是会运行,因为rt_application_init把它创建成了一个用户线程,跟其他线程/任务的作用相同。在libcpu里面的子文件找都自己所用芯片的内核,比如 libcpu / arm / cortex-m3的,把这两个文件添加进工程即可。搭建rt-thread nano的工程跟FreeRTOS是差不多的,nano版本的东西不多,主要还是分两个部分。以上就已经是移植完成了。
2025-07-08 18:35:33
438
2
原创 STM32 HAL库 EC11旋转编码器相位检测原理和程序
将A端看作时钟线,B端看作数据线,每次A端变化时读取B端的数据即可完成驱动,A端的变化的瞬时的,需要使用中断检测,才能快速响应处理。顺时针方向时,看A端变化 0->1是上升沿,1->0是下降沿,每次变化后的B的电平也会跟着改变,所以 (A = ↑,B = 0)或者(A = ↓,B = 1)代表顺时针方向。逆时针方向时,看A端变化 0->1是上升沿,1->0是下降沿,每次变化后的B的电平也会跟着改变,所以 (A = ↑,B = 1)或者(A = ↓,B = 0)代表逆时针方向。
2025-07-02 10:53:47
916
原创 STM32的hal库 ADC+DMA循环模式
x = 1,2,3;最大值 表示的是ADC的个数,表示第x个ADC。y = 0...17;表示第x个ADC的可选用通道。用PB0选用ADC1,则对应ADC1_IN8,用PB1选用ADC1,则对应ADC1_IN9,以stm32f103rct6为例,
2025-06-26 15:45:49
478
原创 STC配置IO口模式的宏定义
很少使用stc单片机,有时候用到了,但是容易忘记管脚的模式怎么配置,所以写了个宏定义放在头文件,这个宏可以配置单个IO口,没什么用处,但是可以偷懒,嘻嘻。P5.4配置为高阻输入 :GPIO_PIN_INIT(5,4,0,1);P2.0配置为开漏输出 :GPIO_PIN_INIT(2,0,2,1);
2024-12-27 17:56:01
469
原创 keil stm32生成.bin格式的文件
User这个页面的功能一般是给用户在文件编译前和编译后进行一些自定义的操作的,例如执行脚本、.exe、生成编译日志等等。这里用到的就是执行.exe了,其中fromelf.exe是keil_mdk自带的一个格式转工具,自己选好项目下已经存在的文件夹,转换后的文件就会生成在相对路径下了。安装arm的mdk下的工具路径 --bin --output ../自定义路径/生成的.bin文件 ../axf文件的路径。2.选axf文件输出位置,再填输出文件的名字,默认的名字也行,后面要找得到就行了.
2024-12-25 16:29:47
450
原创 stm32 printf 串口中文乱码问题
2.如果只是输出中文有乱码问题,真正的原因就是你保存的.c文件的格式和串口平台的接收格式不一致,比如在KEIL中,为了避免中文对我们编写代码时的麻烦,我们通常会将文件以GB2312编码格式打开、修改和存储,如果选择了GB2312格式存储文件,编译.c文件时,其中所有常量字符串也会默认为GB2312格式,而在其他平台文件通常是以UTF-8、ANSI格式打开和解释文件的,编码不一致时就会导致编码出现乱码的问题。使用串口输出函数后,可能会出现中文乱码的问题,有部分解决方法。
2024-12-25 16:11:41
2116
原创 Unable to automatically place AT section system_xx32f0xx.o(.ARM.__at_0x20000000)
启动文件连接阶段很可能缺失中断处理函数原型,请编写对应的中断函数。Unable to automatically place AT section system
2024-06-13 16:13:32
1594
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅