【STM32调试】寄存器调试不良问题记录持续版

这篇具有很好参考价值的文章主要介绍了【STM32调试】寄存器调试不良问题记录持续版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【STM32调试】寄存器调试不良问题记录持续版,stm32,寄存器,调试

记录一些stm32调试过程中:不易被理解、存在使用误区、不清不楚、是坑、使用常识等方面的一些记录。本记录只包含stm32的内核以及外设等寄存器的调试,不包含业务方面。

低功耗管理

  1. 使用低功耗功能前是否需要打开PWR时钟?

是需要先打开PWR时钟的,否则无法唤醒。

  1. 睡眠模式、停机模式和待机模式的区别?引用地址

这两个模式与睡眠模式相比,属于深度睡眠模式。

睡眠模式
【STM32调试】寄存器调试不良问题记录持续版,stm32,寄存器,调试

停机模式
【STM32调试】寄存器调试不良问题记录持续版,stm32,寄存器,调试

待机模式
【STM32调试】寄存器调试不良问题记录持续版,stm32,寄存器,调试

NVIC(内嵌的中断向量控制器)

NVIC是什么东西?是内嵌的中断向量控制器?翻译的被不明不白,无法理解。说简单一点就是,来管理全部的中断的控制器,哪个中断来了,谁先来的,谁后来的,应该先运行哪个?能不能被抢占,还是按照顺序执行等。

  1. 如何理解中断、挂起?

国内单片机学习者一开始都是学习别人翻译过来的中文手册,我也不例外。但是翻译过来的有些就十分的晦涩难懂,更甚者还会有错误出现(例如,EXTI的中断\事件控制框图)。所以建议去看看英文手册,即使借助翻译软件慢慢看也没有关系。
对于理解中断、挂起,十分有帮助的地方是M3权威指南手册的124页,看完如果没有帮助你来找我。

  1. NVIC中的Pending(中断挂起)位会自动清除吗?

当触发了某个中断,并进入了该中断服务函数的话,该位是会被硬件自动清除的。
但是触发这个中断的外设中的中断标志位的话,并不一定会自动清除,需要查看手册,看是否需要自己手动清除。

EXTI(外部中断/事件)

  1. 将PortA0连接到EXTI0,触发外部中断,总是进入两次中断服务函数,并且没有外部干扰存在。
void EXTI0_IRQHandler(void)
{
	// 中断执行的业务代码...
   	ExtiClearIntStatus(0u); //清除LINE0上的中断标志位 
}

解释:
① 该现象十分有规律,可以考虑是因为没有清除掉EXTI的挂起寄存器,导致该中断一直被挂起,即使退出了中断服务函数,还是会一直进入该中断。
② 但是,每次只进入两次,上述还是解释不通,并且代码中已经将挂起寄存器中的中断标志清除掉了。
③ 最终原因是因为,清除中断标志的函数写在了最后一句,导致中断服务函数返回后,硬件上仍旧没有来得及将挂起寄存器的标志位清零(硬件执行是有延迟的)。所以导致又一次进入了中断服务函数。并且在仿真调试中,我也发现,第一次进入中断服务函数时,EXTI的PR挂起寄存器中的中断标志位为置位状态,第二次进入中断服务函数时,发现该位已经被清除。
④ 所以,最要是一进入中断服务函数,就将挂起的标志位清除掉,再执行业务逻辑代码,给硬件一定的执行事件。

DMA(直接内存访问)

  1. 下面的代码对dma进行寄存器操作总是写入失败?
	RCC->AHBENR |= RCC_AHB_DMA1;      // 开启DMA1时钟
	
	DMA_CHx->CPAR = uiPeriAddr;       // 外设地址
	DMA_CHx->CMAR = uiMemoryAddr;     // 内存地址

解释:
如果这样操作,dma的这两个寄存器总是写入不成功。
因为刚开启了DMA时钟,还并未稳定(电路的运行也需要时间),所以写入失败,需要在时钟开始后,加入延迟。
应该加入至少大于等于两个时钟周期【__nop();】。

  1. 使用Dma进行发送时,有什么注意事项?

① 最好是使用Dma正常模式(即非循环模式)进行发送。也就是数据转移(发送)到全满就停止Dma发送。
② 在Dma配置发送初始化时,因为这个时候还没有数据要进行发送,所以CNDTR寄存器的值请写入0,否则当你使能Dma时,它会自动发送数据。最好是等想要发送数据时:先失能Dma,写入想要发送的数据长度,再使能Dma,启动发送。文章来源地址https://www.toymoban.com/news/detail-801987.html

到了这里,关于【STM32调试】寄存器调试不良问题记录持续版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 入门 —— 寄存器与 GPIO

    STM32 总线构图: 什么是寄存器 根据百度百科介绍,寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。简单来说,寄存器就是存放东西的东西,存放的东西是指令、数据或地址 存放数据的寄存器最容易理解,不同

    2024年02月04日
    浏览(28)
  • STM32存储器映射以及寄存器映射

    目录 1.STM32的寻址范围? 2.存储器映射 3.存储器功能划分(以STM32F1为例) 4.寄存器映射 1.32位单片机有32根地址线,每根地址线有两种状态,导通或者不导通。 2.单片机内存地址访问的存储单元是按字节编址的,而不是bit。 比如我们要访问0x01这个地址,访问的其实是一个字节的空

    2024年04月23日
    浏览(23)
  • STM32的GPIO操作(寄存器&HAL)

    (注:此为乐某学习记录,若有出错的地方欢迎各位指出!) 本人使用的开发板的芯片是STM32H743XIH6,所以外设也是根据此芯片来介绍。 在使用HAL库配置的时候,需要安装STM32CubeMX。此软件可在ST官网下载,剩下的安装步骤比较简单,不会单独出篇进行讲解。 STM32CubeMX下载网址

    2024年02月04日
    浏览(31)
  • STM32-ADC电压采样实验(寄存器版)

    STM32F10X系列支持三路ADC,其ADC通道及对应IO口如下表所示: 其能接受的电压输入范围一般为0-3.3V(V REF- ≤ V IN ≤ V REF+ ),因此,如果需要测量超出0-3.3v量程范围的电压数据,需要在外围硬件增加分压电阻,将电路转换到0-3.3V量程范围内再进行采集。 这里用于做ADC采集的引脚使

    2024年02月15日
    浏览(30)
  • STM32 寄存器配置笔记——GPIO配置输出

           本文主要介绍GPIO 作为输出时的寄存器配置。包括时钟配置,输出模式配置。以STM32F10xxx系列为例,配置PA8、PD2端口作为输出,输出高/低电平。         1)GPIO外设时钟          通过查找STM32F10xxx中文参考手册得知,GPIO PORT口的时钟配置在RCC_APB2ENR寄存器的第2~6位,

    2024年01月24日
    浏览(32)
  • keil5 查看stm32 寄存器的值

    1 查看芯片内部寄存器的值,首先是在仿真状态下,首先仿真,程序运行。 2 点击菜单栏的 View - System viewer ,右侧便会出现芯片的所有寄存器(如果没有,需要添加),点击要查看的寄存器,便会出现在侧边栏上 可以查看值,也可以直接设置寄存器的值。 3 如果没有出现,如下

    2024年01月24日
    浏览(23)
  • STM32 寄存器操作 GPIO 与下降沿中断

    寄存器本质就是一个开关,当我们把芯片寄存器配置指定的状态时即可使用芯片的硬件能力。 寄存器映射表则是开关的地址说明。对于我们希望点亮 GPIO_B 的一个灯来说,需要关注以下的两个寄存器:   对于我们实现希望点亮一个灯的需求来说,不仅需要配置配置 GPIO_B 的时

    2024年02月20日
    浏览(29)
  • STM32微机系统框架、内存、存储器、寄存器

    大家好,我是 杰哥嵌入式开发 最近在出定时器系列, 但是线下班有一些学生在学习完C语言之后, 在51接触各种寄存器和对软件代码各种操作是如何在单片机系统中起到作用的感到非常的不解, 经过我的初步分析,是对嵌入式微机系统的大概雏形系统框架不熟悉导致。 所以

    2024年02月06日
    浏览(33)
  • 【【萌新的STM32学习25--- USART寄存器的介绍】】

    STM32–USART寄存器介绍(F1) 控制寄存器1 (CR1) 位13: 使能USART UE 0: USART分频器和输出被禁止 1: USART模块使能 位12 : 配置8个数据位 M 该位定义了数据字的长度,由软件对其设置和清零 0: 一个起始位,8个数据位,n个停止位 1: 一个起始位,9个数据位,n个停止位 有效数

    2024年02月09日
    浏览(23)
  • 深度理解STM32的串口实验(寄存器)【保姆级教程】

    USART—通用同步异步收发接收器,是一个串行通信设备,可以和外部设备进行灵活的全双工数据交换,有别于USART还有一个UART(在原来的基础上裁剪掉了同步通信功能(时钟同步)),串行通信一般是以帧格式传输数据,一帧一帧的传。 协议层: 串口通信的一个数据包包含从

    2023年04月15日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包