发现不少有趣的东西,记录一下。
首先是下载pack,可以很精确的选择
在网络畅通下选择
安装CMSIS包
一般来说,C和H是一起出现的,但是这里只有C,H呢?
可以看一些这个bat文件
是在这里使用的,编译以后移动固件
这个是我们后面说的,VSCode的新插件
Arm Compiler for Embedded 6 基于现代 LLVM 编译器框架。Arm Compiler 5 不基于 LLVM 编译器框架。
顺便换个好看的字体
这里也改了,要烫死了
可以看到其实C和H是同时出现的
只是在keli里面是两个位置进行配置
都是有结果的
在截图的左下角有个 Memory 内存区,在这个内存区里面有一个缓冲 Event Buffer,其实就是一个大数组。MDK 通过访问这个数组实现消息的图形化展示。为了正确的图形化展示,数组缓冲里面的数据就得有一定的数据格式。而这个数据格式就是通过左侧截图里面的 Event Recorder 和 Event Filter 来实现的。Event Recorder 的 API 实现数据记录和整理,Event Filter 的 API 实现数据的筛选,从而可以选择哪些数据可以在 MDK 的 Event Recorder 调试组件里面展示出来。这就是 Event Recorder 的基本工作流程。
Event Statistics 提供的时间测量功能简单易用,在测试代码前后加上测量函数即可
Event Statistics 提供的功耗测量功能,当前只有 KEIL 的 ULINKplus 支持此功能,由于 ULINKplus价格不便宜,一套 5000 多,大家作为了解即可,实际效果如上。
Event Recorder 的特色主要有以下几点:
1. 提升应用程序动态执行期间的检测能力。
2. 支持的事件类型滤除机制,比如运行错误、API 调用、内部操作和操作信息的区分。
3. 可以在任务中、RTOS 内核中和中断服务程序中任意调用。
4. 对于带 ITM 功能的 Cortex-M3/M4/M7/M33 内核芯片,执行记录期间,全程无需开关中断操作。
对于不带 ITM 功能的 Cortex-M0/M0 /M23,是需要开关中断的。
5. 支持 printf 重定向。
6. 各种 link 通吃,支持 SWD 接口或者 JTAG 接口方式的 JLINK、STLINK、ULINK 和 CMSIS-DAP。
7. 对于带 DWT 时钟周期计数器功能的 Cortex-M3/M4/M7/M33 内核芯片,创建时间戳时,可以有效
降低系统负担,无需专用定时器来实现。
8. Event Recorder 执行时间具有时间确定性,即执行的时间是确定的,而且执行速度超快,因此,实
际产品中的代码依然可以带有这部分,无需创建 debug 和 release 两种版本。
9. RTX5 及其所有中间件都支持 Event Recorder 调试。
每条 Event Recorder 消息是由 16 字节的数据组成,32 位的 ID,32 位的时间戳,两个 32 位的数据,
共计 16 个字节。其中 32 位 ID 最重要,格式如下:
那这么屌的调试工具怎么打开?
RTE听说过没有?点击这里
打开固件,以及重定向
为了实现 printf 重定向,我们需要将 STDOUT 的输出方式改为 Event Recorder,即选项里面的 EVR。
这里打开
调试的时候就全开
安装以后下面会有一个包的提示
在下面会有一个配置选型卡
自己看看
好用
这里是keli的底层定义的位置
数值定义
CMSIS的启动文件位置
上面的这段代码是建立中断向量表,中断向量表定位在代码段的最前面。具体的物理地址由链接器的
配置参数(IROM1 的地址)决定。如果程序在 Flash 运行,则中断向量表的起始地址是 0x08000000。
简单的汇编语言实现 IF…….ELSE…………语句。如果定义了 MICROLIB,那么程序是不会执行 ELSE分支的代码。__MICROLIB 可能大家并不陌生,就在 MDK 的 Target Option 里面设置。
icroLib 是 MDK 里面带的微库,针对嵌入式应用,MicroLIB 做了深度优化,比使用 C 标准库所需的 RAM 和 FLASH 空间都大大减小。只有库,没有源文件
缩小库的大小
晶振匹配
这里是HAL库最需要的地方
看初始化里面的函数
调用了这个Init
◆ 设置滴答定时器的每 1ms 中断一次。
◆ HAL 库不像之前的标准库,在系统启动函数 SystemInit 里面做了 RCC 初始化,HAL 库是没有做的,
所以进入到 main 函数后,系统还在用内部高速时钟 HSI,对于 H7 来说,HSI 主频是 64MHz。
◆ 函数 HAL_Init 里面调用的 HAL_MspInit 一般在文件 stm32h7xx_hal_msp.c 里面做具体实现,主要
用于底层初始化。当前此函数也在文件 stm32h7xx_hal.c 里面,只是做了弱定义。
若定义,可以自己实现
for循环16次,如果是程序运行期间的引脚状态切换,最好采用下面的方式或者直接寄存器操作
在大多数原厂厂商的型号后缀里面,后缀TR=tape and reel,即包装方式为卷带包装的意思。
是的,在意法半导体STMicroelectronics也是同样的意思。
代码语言:javascript复制https://blog.csdn.net/BOB_CHAN_96/article/details/130818551?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-130818551-blog-78139482.235^v39^pc_relevant_anti_vip&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-130818551-blog-78139482.235^v39^pc_relevant_anti_vip&utm_relevant_index=2