- 博客(11)
- 收藏
- 关注
原创 STM32 调试进不了main函数
STM32的半主机(Semihosting)模式是一种调试技术,它允许开发者在没有操作系统的环境下,通过调试器来调用一些主机系统的服务。使用半主机模式的好处是:简化了开发过程,因为可以直接使用标准C库中的I/O函数,不需要在目标硬件上实现完整的文件系统或复杂的I/O驱动程序,可以直接查看程序运行时产生的输出,这对于调试非常有帮助。利用MDK的软件组件(software component )功能,它为各种标准I/O通道(File, STDERR, STDIN, STDOUT和TTY)提供重定向I/O功能。
2024-10-21 11:02:40
2309
1
原创 Jlink与STM32通过SWD连接方式下载/调试程序
左边红色框为调试相关引脚输入,它是一个Arm®标准CoreSight调试端口,结合了JTAG-DP(5引脚)接口和SW-DP(2引脚)接口。串行线调试端口(SW-DP)提供一个2引脚(时钟+数据)接口到ahp - ap端口。jlink的SWDIO、SWCLK、Vtref、GND分别连接到STM32的PA13、PA14、VCC、GND。STM32调试相关的引脚有5个,使用SW-DP可以节省引脚,只用到了PA13(SWDIO),PA14(SWCLK)。2、SW-DP 相关引脚。3、jlink引脚定义。
2024-10-19 16:09:37
1586
原创 STM32 malloc函数(堆区)多线程安全问题
我这里只调用一次heap_mutex_init()创建了一个互斥锁,在进入多线程环境前调用即可。当然多个共享资源使用同一个互斥锁会降低资源利用率,也可以改进针对不同的共享资源使用_mutex_initialize(void *sid)创建不同的互斥锁(需要重新实现)。可以通过调试方式确认这些互斥锁有没有生效,观察使用malloc函数时有没有调用_mutex_acquire(osMutexId *sid)和_mutex_release(osMutexId *sid),若调用了说明互斥锁有效。
2024-01-09 20:00:30
1487
原创 STM32F427配置168MHz最高频率(提高程序运行速度)
确保 VCO 输入频率介于 1 和 2 MHz 之间,根据使用的外部高速晶振的频率确定,选择一个恰当的PLLM使输入VCO的频率为1MHz。我们使用PLLN = 336,即VCO 输出频率=336MHz,满足VCO 输出频率介于 192 和 432 MHz 之间(PLLN 并且 192
2024-01-06 18:08:44
2492
1
原创 J-Link RTT Viewer连接后不能打印问题
因为RTT Control Block比较靠后,所以自动探测并没有找到,我们选择Address,然后手动输入RTT Control Block地址即可。首先找到编译出来的.map文件,打开文件后搜索“_acUpBuffer”,找到这个变量后,这个变量上面是“.bss”,复制这一行的地址。RTT Control Block 选择 Auto Detection,没有任何打印输出。1、J-Link RTT Viewer不能打印问题。按下图填入再连接,打印正常。
2024-01-04 17:59:34
3411
7
原创 STM32 -O2编译进入HardFault_Handler 问题定位
参考cortex-M4 device generic user guide,查找引起HardFault_Handler的原因。LDM指令不支持访问非对齐地址内存,故只要将LDM指令访问的全局变量进行4字节对齐即可。代码O0编译运行正常,O2编译会运行进入HardFault_Handler。//使该变量的地址起始值按照4字节对齐。运行完LDM后就会进入HardFault_Handler。发现是发生了访问非对齐地址内存。
2023-11-24 15:18:12
1230
1
原创 C语言volatile用法/Keil编译器优化/delay被编译器优化
*有的小伙伴可能看到这里会很懵,CPU访问变量不就是访问内存中的实际变量吗,并不是这样的,CPU内部还有寄存器,CPU读写寄存器的速度是远大于读写内存的速度,为了提高程序的执行速度,编译器会优化代码,把实际的变量存放到寄存器中,通过读写寄存器来访问该变量。加了volatile关键字的delay函数,使用-O2优化等级,执行速度比不加volatile关键字的delay函数(使用-O0优化)还慢,说明了使用-O0优化编译器仍然会作一定优化。补充实验,声明变量count时也加入了volatile关键字,
2023-05-01 17:52:27
1893
1
原创 LWIP打印调试信息的方法
LWIP_DBG_MASK_LEVEL为调试信息等级,0x00打印所有调试信息。里面提供了多种调试选项,默认是关闭的,根据需要自行选择。例如我要调试DHCP模块,就在文件按如图所示定义。定义调试信息的输出方式,这里我选择jlink打印。LWIP_DEBUG为总开关。
2023-04-01 15:58:05
3594
原创 Makefile make错误 配方在第一个目标前开始。 停止。
修改makefile文件后,makefile文件及make后的提示的错误如下图所示,提示错误在19行。查阅了相关资料,提示这个错误是因为出现了不需要的空格或者制表符,去掉18行"bsp/delay "后面的空格后(红色箭头所指的空格),meke一切正常。
2022-09-03 21:33:10
5523
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅