当前位置: 首页 > article >正文

STM32原理性知识

文章目录

    • 1、如何在STM32 实现原子操作
  • 2、寄存器是什么?为什么向外设地址写值可以控制外设的状态?

1、如何在STM32 实现原子操作

在CMSIS模块中已经提供了原子操作宏,用于操作16位或32位变量,包括ATOMIC_SET_BIT、ATOMIC_CLEAR_BIT、ATOMIC_MODIFY_REG,该功能是使用LDREX和STREX指令来实现的。可以通过对原子操作的封装实现互斥。
LDREX和STREX指令是Thumb指令集提供的排他加载和排他访问指令,用以实现排他性访问。

2、寄存器是什么?为什么向外设地址写值可以控制外设的状态?

寄存器是一段特殊的内存 ,寄存器通过存储器映射可以向内存一样寻址和访问,它实际上是硬件资源的一部分,它连接到硬件电路,所以对寄存器的写会变成对应的电路的电压,通过门电路,这种电压的改变对应到物理电路中。
每个外设是一块独立的时序电路,它内部有有一个叫D触发器的电路,这个电路可以保存高低电平,一个8bit的外设寄存器就是有8个D触发器,D触发器连接CPU的总线,通过存储器映射,CPU可以通过地址访问D触发器,所以CPU可以通过总线向D触发器写入高低电平(0 和 1),**同时,**D触发器连接外设内部的门电路,CPU向D触发器写0或1,D触发器保存值,并通过这些值(给高低电平)控制门电路的开关,从而改变整个外设时序电路的状态。这就是为啥我们像外设地址写值可以控制外设的状态的根本原因。


http://www.kler.cn/a/597412.html

相关文章:

  • 《深入剖析鸿蒙生态原生应用:一次开发多端部署的技术革新》
  • 【数学建模】Lingo 18.0及其安装教程(保姆级)
  • 【Qt】自定义委托(Delegate)的核心方法
  • 基于Netty实现高性能HTTP服务的架构解析
  • Apache APISIX 架构浅析
  • 如何解决 PHP 运行时错误导致的服务中断
  • 网页性能优化中 有一条叫做“避免使用未合成的动画”,请问该如何理解?
  • vim在连续多行行首插入相同的字符
  • 同旺科技USB to I2C 适配器 ---- 指令之间延时功能
  • 【项目设计】网页版五子棋
  • STM32 HAL库函数原理解析
  • VSCode配置C语言保姆课
  • 数据结构——最短路径BFS算法
  • taosdump恢复数据库
  • Qt窗口控件之对话框QDialog
  • 31天Python入门——第10天:深入理解值传递·引用传递以及深浅拷贝问题
  • 银河麒麟V10-SP3-aarch64操作系统版本 docker run时报错permission denied
  • Springboot之RequestContextHolder 学习笔记
  • 高防ip和高防服务器的区别?
  • Unity | Tag、Layer常量类生成工具