自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 STM32H7的LCD控制学习和应用

仅供个人学习,参考armfly。

2024-04-23 11:34:54 932

原创 STM32H7中FMC高速读写SDRAM

这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。tRCD 是 SDRAM 的一个重要时序参数,广义的 tRCD 以时钟周期数为单位,比如 tRCD=2,就代表延迟周期为两个时钟周期。具体到确切的时间,则要根据时钟频率而定,对于 STM32H7 驱动 SDRAM,采用的 200MHz,实际使用要做 2 分频,即 100MHz,那么我们设置 tRCD=2,就代表 20ns 的延迟。

2024-04-20 11:11:57 884

原创 FMC总线应用控制32路高速IO扩展

仅供个人学习,来源于armfly。为什么要做 IO 扩展,不是已经用了 240 脚的 H743XIH6 吗?因为开发板使用了 32 位 SDRAM 和RGB888 硬件接口,消耗 IO 巨大,所以必须得扩展了。扩展的 32 路高速 IO 非常实用,且使用简单,只需初始下 FMC,32 路 IO 就可以随意使用了。当前的扩展方式只支持高速输出。FMC 总线扩展 32 路高速 IO 理解成 GPIO 的 ODR 寄存器就很简单了,其实就是一个东西。

2024-04-20 10:47:13 281

原创 STM32H7的ADC定时器触发配合定时器的DMA双缓冲

ADC_INP[0:19]和 ADC_INN[0:19]INP 是差分正向输入,INN 是差分反向输入。ADC_INP[0:5]和 ADC_INN[0:5]是快速通道。ADC_INP[6:19]和 ADC_INN[6:19]是慢速通道。共有 21 路触发用于规则通道,ADC1 和 ADC2 共用的,而 ADC3 是独立的。共有 21 路触发用于注入通道,ADC1 和 ADC2 共用的,而 ADC3 是独立的。adc_awd1,adc_awd2 和 adc_awd3。

2024-04-19 16:49:51 684

原创 STM32H7的DMA双缓冲控制IO输出脉冲

【代码】STM32H7的DMA双缓冲控制IO输出脉冲。

2024-04-15 11:31:25 228

原创 STM32H7的DMAMUX

DMAMUX 其实就是 DMA 控制器前一级的多路选择器,有了这个选择器就不用再像 F1,F4 系列那样每个通道(数据流)要固定选择指定的外设,有了多路选择器就可以任意选择,外设使用 DMA 方式时无需再选择指定的 DMA 通道(数据流),任意通道(数据流)都可以。当前STM32H7有两路DMAMUX,分别是DMAMUX1和DMAMUX2,其中DMAMUX1负责DMA1和 DMA2,而 DMAMUX2 负责 BDMA。这张图反过来就好看多了。

2024-04-15 10:13:44 811

原创 STM32H7定时器TIM1-TIM17中断、PWM实现

STM32H7 支持的定时器有点多,要简单的区分下。STM32H7 支持 TIM1-TIM8,TIM12-TIM17 共14 个定时器,而中间的 TIM9,TIM10,TIM11 是不存在的,这点要注意。

2024-04-13 17:13:48 892

原创 STM32H7的8个串口fifo收发(兼容232和485)

uart驱动包括中断配置等应用示例RS485深入理解看armfly老哥的帖子:https://www.armbbs.cn/forum.php?mod=viewthread&tid=90753

2024-04-13 16:16:08 1268

原创 STM32H7在cache下的串口DMA收发demo

DMA使用的memory空间使能了Cache的话,空间要做32位字节对齐。同时为了保持数据一致性1、AXI RAM空间MPU直接设置为WT模式。2、DMA接收后,使用函数SCB_InvalidateDCache_by_Addr做接收缓冲区无效化。

2024-04-13 10:56:11 349

原创 STM32H7各块RAM的位置和作用

摘抄于armfly-V7开发板bsp手册,仅供个人学习。

2024-04-13 10:34:54 1042

原创 STM32H7将关键代码放在ITCM执行的方法

设置 DTCM 空间,前 0x400 大小的空间用于中断向量表,所以这里从 0x20000400 开始,用于各种变量需求。ITCM 的首地址是 0x0000 0000,大小 64KB。

2024-04-12 17:21:49 203

原创 TCM SRAM等五块内存的使用和动态分配

【代码】TCM SRAM等五块内存的使用和动态分配。

2024-04-12 16:48:24 179

原创 STM32H7的Cache学习和应用

如果 CPU 要写的 SRAM 区数据在 Cache 中已经开辟了对应的区域(专业词汇叫 Cache Line,以 32字节为单位),这就叫写命中(Cache hit),如果 Cache 里面没有开辟对应的区域怎么办,这就是所谓的写 Cache Miss。如果每次 CPU 要读写 SRAM 区的数据,都能够在 Cache 里面进行,自然是最好的,实现了 200MHz到 400MHz 的飞跃,实际是做不到的,因为数据 Cache 只有 16KB 大小,总有用完的时候。

2024-04-12 15:55:06 882

原创 STM32H7的MPU学习和应用示例

MPU(Memory Protection Unit,内存保护单元),早在 STM32F1 和 F4 芯片上面也是有这个功能的,但是基本用不上。但是到了 H7 就得用上了,因为要设置 Cache。MPU 可以将 memory map 内存映射区分为多个具有一定访问规则的区域,通过这些规则可以实现如下功能:◆ 防止不受信任的应用程序访问受保护的内存区域。◆ 防止用户应用程序破坏操作系统使用的数据。◆ 通过阻止任务访问其它任务的数据区。◆ 允许将内存区域定义为只读,以便保护重要数据。

2024-04-12 15:25:33 967

原创 MCU多组软件定时器的实现

4/* 软件定时器的个数 (定时器 ID 范围 0 - 3) */TMR_ONCE_MODE = 0, /* 一次工作模式 */TMR_AUTO_MODE = 1 /* 自动定时工作模式 *//* 定时器结构体,成员变量必须增加__IO 即 volatile,因为这个变量在中断和主程序中同时被访问,有可能造成编译器错误优化。*//* 计数器模式,1 次性 *//* 定时到达标志 *//* 计数器 *//* 计数器预装值 */}SOFT_TMR;/* 定于软件定时器结构体变量 */

2024-04-12 15:07:30 229

原创 NVIC中断分组和配置

另外特别注意一点,配置抢占优先级和子优先级,它们合并成的4bit 数字的数值越小,优先级越高,这一点千万不要搞错了。⚫ 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务程序执行过程中被响应,即中。⚫ 在抢占式优先级相同的情况下,有几个子优先级不同的中断同时到来,那么高子优先级的中断优。⚫ 在抢占式优先级相同的情况下,如果有低子优先级中断正在执行,高子优先级的中断要等待已被。也就是没有抢占式优先级,只有子优先级。断嵌套,或者说高抢占式优先级的中断可以抢占低抢占式优先级的中断的执行。

2024-04-12 14:42:55 321

原创 嵌入式C语言编码规范

(5) if、for、while、switch 等与后面的括号间应加空格,使 if 等关键字更为突出、明显,函数名与其后的括号之间不加空格,以与保留字区别开。(2)比较操作符,赋值操作符"=“、 “+=”,算术操作符”+“、”%“,逻辑操作符”&&“、”&“,位域操作符”

2024-03-30 14:53:57 977

原创 GPIO的基础知识

首先对于GPIO我们需要注意以下几点。

2024-03-29 14:39:41 1102

原创 STM32H7的boot启动模式

跟F1和F4不同的是,H7的启动方式只有一个boot引脚,但是这个引脚只能区分两种状态,因此H7配套了两个option bytes选项字节配置,◆ 如果用户不慎,设置的地址范围不在有效的存储器地址,那么 BOOT = 0 时,会从 Flash 首地址0x0800。设置了选项字节后,掉电不会丢失,下次上电或者复位后,会根据 BOOT 引脚状态从 BOOT_ADD0,0000 启动,BOOT = 1 时,会从 ITCM 首地址 0x0000 0000 启动。或 BOOT_ADD1 所设置的地址进行启动。

2024-03-29 11:19:25 307

原创 MicroLib小解一下

MicroLib 是一个高度优化的库,用于用 C 编写的基于 ARM 的嵌入式应用程序。与 ARM 编译器工具链中包含的标准 C 库相比,MicroLib 提供了许多嵌入式系统所需的显著代码大小优势。__initial_sp 表示栈顶地址,__heap_base表示堆起始地址,__heap_limit 表示堆结束地址。没有定义__MICROLIB,实际的情况就是我们没有定义__MICROLIB,所以使用默认的 C 库运行。MicroLib 经过优化,与使用 ARM 标准库相比,使用更少的代码和数据存储器。

2024-03-29 10:56:54 430

原创 STM32模拟I2C控制TM1650数码管显示电压电流

TM1650内部有4字节的显存,地址分别为0x68,0x6A,0x6C,0x6E,分别用于存放显示在DIG1,DIG2,DIG3,DIG4的段码数据。例如想要让DIG1对应的数码管位显示数字2,则要往0x68单元写入数字2的共阴段码0x5b。例如亮度,7段或者8段显示,显示的开关。这边应用层 对电压采用两位整数一位小数的显示方式,对电流采用一位整数两位小数的显示方式。DIGx:数码管的位选引脚,灌电流驱动,最大可吸收150mA电流。A~DP:数码管的段驱动引脚,拉电流驱动,最大可输出25mA电流。

2024-03-13 10:07:25 633

原创 vscode将tab改为四个空格

关了自动检测。

2024-03-11 15:17:08 217

原创 vscode的C/C++明明定义了,还是会标红,一键解决

两种方法

2024-03-08 17:23:13 406

原创 git unable to access的方式,【有代理】

然后切换 git config。Git命令取消proxy代理。查看自身代理,这边小打个码。

2024-03-06 16:28:24 293

原创 STM32H7VI电源、复位、时钟

主要看 Operating mode 部分,依次是 Power down –> Reset -> Wait Oscillator ->HW system init -> Run -> Wait ACTVOS RDY –> Run,即断电状态 -> 复位状态 -> 等待 HSI 就绪->硬件初始化 -> 运行 -> 等 ACTVOS 位就绪 -> 正式运行。本质上是给硬件复位发送了一个复位信号。

2024-02-22 17:24:24 876

原创 keil5废了怎么卸载干净

在HKEY_CLASSES_ROOT下。进入控制面板卸载keil5。

2024-02-22 12:17:59 1729

原创 STM32H743xI总线解析(AXI重点)

ASIB连接的主控协议总线带宽读/写发起能力IN1D2 域的 AHB 总线AHB-lite321/4IN2Cortex-M7AXI4647/32IN3SDMMC1AHB-lite321/4IN4MDMAAXI4644/1IN5DMA2DAXI4642/1IN6LTDCAXI4641/1ASIB连接的从设备协议总线带宽读/写发起能力/总接收能力TARG1D3 域的 AHB 总线AXI4321/1/1TARG2。

2024-02-21 15:10:20 976

原创 stm32H7选型(根据官网和文档)

在STM32H7官网中我们可以找到以下图,对stm32各个型号有一个基本的介绍。我们随便下一个文档,比如我这里用的是STM32H743VI系列的,就直接从文档中找到Table2,可以知道STM32H743XI/G的详细外设介绍。综上述方式我们可以对STM32H7的型号种类有一定的了解,来帮助我们进行选型。

2024-02-21 14:29:41 274

原创 STM32如何判断进debug?今天帮你把debug寄存器全弄懂,附上验证过程

我们可以通过DHCSR的C_DEBUGEN位来判断此时是否正在进行调试,与是否正断点和暂停无关。最后写出的判断代码如下。

2024-02-01 14:36:52 1197

原创 KEIL-MDK 代码格式化统一风格

我们在使用编辑器的缩进(TAB)功能时,由于不同编辑器的差别,有的插入的是制表符,有的是2个空格,有的是4个空格。为了解决这个问题,使用C++开发了一个插件,它可以自动重新缩进,并手动指定空格的数量,自动格式化源文件。它是可以通过命令行使用,也可以作为插件,在其他IDE中使用。使用 keil(MDK) 的代码编辑器编辑时,每次都是手动调整格式,这样既麻烦又容易格式不统一,实在不能忍受,所以我们就介绍一个叫做 Astyle 的神奇工具,它可以方便的将程序代码格式化成自己想要的样式而不必人工修改。

2024-01-27 11:28:06 490

原创 MCU启动文件小解一下

启动文件解析,参考了许多资料

2024-01-27 10:21:31 983

原创 MDK编译出来一大堆神魔文件到底是啥?今天帮你全弄懂!

MDK 编译工程,会生文件(如.o、.axf、.map 等),最终生成 hex 文件和bin文件,以便下载到 MCU 上面执行。对于 MDK 工程来说,基本上任何工程在编译过程中都会有这 11 类文件,常见的 MDK编译过程生产文件类型

2024-01-25 10:55:53 869

原创 啥都没动,xml文件读取失败,原来是文件编码格式问题

CRLF 是 carriage return line feed 的缩写;中文意思是 回车换行。LF 是 line feed 的缩写,中文意思是换行。

2024-01-08 17:47:16 379

原创 一个大点的局部数组把freertos任务栈爆了,用ozone+串口分析解决

上述两种方式都可对freertos栈的剩余量进行分析,但ozone显示的栈会比总的栈深略小。但不管是何种方式都能够发现此时的栈已经超过了一开始申请的128*4 = 512字节,需要曾加栈的大小。相比于freertos经典的检测栈溢出的方式,上述方法不仅能够说明栈溢出,还能够判断需要增加的栈的大小。以下为两种freertos经典的检测栈溢出的方式。

2024-01-08 14:50:51 374

原创 ozone+SEGGER 调试COTEX-M7+freertos,专为freertos疑难杂症而生

在console窗口下输入我们的命令:Project.SetOSPlugin (“C:\Program Files\SEGGER\Ozone\Plugins\OS\FreeRTOSPlugin_CM7.js”),你是cotex-M7架构就输入CM7,M4架构就输入CM4。首先打开我们C:\Program Files\SEGGER\Ozone\Plugins\OS的目录,不同人安装的目录可能不同我这里是C:\Program Files。然后就可以在我们的view里就可以看到freertos了。

2023-12-27 16:09:12 508

原创 O(0)优化进hardfault

总结:原来,在O(0)优化下会对fputc和_ttywrch进行编译,然后又调用到了这两个函数,最终导致程序直接跑死,进入hardfault。现在重新定义直接将其return了,不会跑死了。最近,遇到个奇怪的问题,在O(0)优化下会进hardfault,而在O(1)优化下不会。最终加了一下代码才ok。

2023-12-06 17:08:24 377

原创 boot跳app结果直接进hardfault(用ozone分析解决)

然后通过MEMORY的窗口到达0x200057E0,该地址里面的值依次为R0~R3、R12、PC(Return address)、xPSR(CPSR或SPSR)、LR。每个寄存器的值存放4个字节。我们需要查找PC和xPSR的值,这个PC值就是进入hardfault前的那段代码的地址。出现hardfault,或者调试看到程序跳到汇编程序的B指令上,是因为boot中开启了一些中断,而中断跳转到app前没有DISABLE掉这些中断而APP中又没有写中断服务函数,导致跳转到中断时找不到服务函数。

2023-12-05 20:09:07 496

原创 为啥要malloc,我直接冲一个大数组行不行?

答案是不行,主要原因是malloc能够动态分配堆的空间,而我们直接分配的大数组作为局部变量分的是栈的空间,而栈的空间一般比较小,很容易就爆了。最近遇到了一个问题,看到程序里面的malloc,我时常会想,直接去定义一个大数组行不行?一篇好文章:https://zhuanlan.zhihu.com/p/106910821。除此之外,还能够定义一个大小可变的数组。

2023-12-02 14:12:48 476

原创 DMA+USART双缓冲区收发,妈妈再也不用担心丢包(附GD32L233源码)

自己写了个类似printf的串口发送,在Xcom里换行尾部加 \ r\ n。以及printf重定向。

2023-11-30 18:44:07 668

原创 在裸机下使用heap4进行内存管理(附源码解析)

size_t101024当然我们也可以用__attribute__ ((section(“.ccmram”)));将其分配到别的ram区10/*<< 下一个内存块 */ size_t xBlockSize;/*<< 内存块大小 */ } BlockLink_t;//当前空闲字节 static size_t xMinimumEverFreeBytesRemaining = 0U;

2023-11-23 14:24:18 129

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除