- 博客(5)
- 收藏
- 关注
原创 手把手教你看stm32的时钟树与时基
【STM32】超清晰STM32时钟树动画讲解简单来说,时钟是单片机的脉搏,是系统工作的同步节拍。单片机上至CPU,下至总线外设,它们工作时序的配合,都需要一个同步的时钟信号来统一指挥。时钟信号是周期性的脉冲信号。举个例子来具体说明时钟的作用。cpu内部由众多的逻辑电路组成,以下面一简单的逻辑电路为例。A、B两线通过一个与门和异或门与寄存器相连,通过控制A、B两线的高低电平来控制寄存器的值。在图中时刻,A、B两线为高电平,寄存器写入零。
2025-01-28 20:38:48
939
原创 keil中除了断点和watch窗口外,一些实用的调试小技巧
hardfault无疑是在调试过程中遇到的非常麻烦的问题,如果在使用rtos或是函数指针时没有好的书写习惯,那么会频繁地进入hardfault。同时,由于cortex核的设计,有很多因素会触发hardfault。如果使用传统的断点调试寻找原因,这个过程无疑是痛苦且漫长的,因此,这里介绍一种更简单,高效地判断hardfaullt错误的原因的方法。
2025-01-28 20:16:21
1267
原创 如何分析ARM—Cortex内核发生HardFault的原因
ARM—Cortex内核发生的错误异常默认都会触发HardFault异常,此外,Cortex-M3与M4还有三个可配置的错误异常处理:MemMange(存储器管理)错误BusFault(总线)错误UsageFault(使用)错误要触发这些异常,需要将其使能,且器优先级要大于硬件异常处理的优先级。
2024-11-25 10:33:29
1112
原创 如何通过KEIL查看外设及内核的寄存器的值
如果你在调试过程中,在进入UART_Receive_IT()前打了断点,并开启System View查看UART寄存器的值,会导致RXNE标志位被清空,进而导致无法进入UART_Receive_IT()处理DR寄存器中的数据,导致数据丢失。内核寄存器的具体用法此处不过多讲述,简单说两个调试过程中比较有用的寄存器,LR寄存器,通过LR寄存器可以追踪当前函数是被谁调用的,以及SP寄存器(栈顶指针寄存器),通过SP寄存器可以追溯多重调用关系。(在程序运行的过程中无法查看,只有通过断点将程序停下后才能查看)
2024-10-23 18:52:08
4149
1
原创 理解HAL_UART_Transmit_IT的原理
而当数据全部发送完成后,在HAL_UART_IRQHandler内会调用UART_EndTransmit_IT(),而这个函数会调用虚回调函数HAL_UART_TxCpltCallback(),可由用户编写数据发送完成后的处理操作。而TXE标志位在每次TDR寄存器的值被移除后都会挂起,这就意味着,如果在其他线程仍在写入TDR寄存器时,使能发送中断,将会打断此线程的写入,为了数据安全性考量,此函数只有在uart的状态是就绪态时才能成功写入。
2024-10-19 21:28:49
613
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人