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

嵌入式C语言寄存器操作

一、常用寄存器操作

/* 设置位 (置1)	*/
*pReg |= (1 << bit_position);/* 清除位 (置0) */
*pReg &= ~(1 << bit_position);/* 取反 */
*pReg ^= (1 << bit_position);

二、寄存器写操作

如下所示为配置Pc13引脚为输出模式的错误示例

/* 配置为通用输出 * 00:Input mode* 01:General purpose output mode* 10:Alternate function mode* 11:Analog mode(reset state)
*/
pReg = (uint32_t *)(0x48000800 + 0x00);
*pReg |= 0x01 << 26;

默认配置为为11,上述操作只修改了第二位,第一位未修改,导致配置错误,正确配置如下:

/* 配置为通用输出 */
pReg = (uint32_t *)(0x48000800 + 0x00);
*pReg &= ~(0x03 << 26);
*pReg |= 0x01 << 26;

上述配置仍存在一定的安全问题,在对寄存器进行操作时,我们一定要遵守:读->改->写的步骤:

/ 单次读-修改-写保证原子性
uint32_t temp = *pReg;
temp &= ~(0x03 << 26);     // 清除MODER13区域
temp |= 0x01 << 26;  // 设为输出模式
*pReg = temp;
http://www.zskr.cn/news/37915.html

相关文章:

  • PC 指针为何不等于执行地址?
  • VIM使用教程
  • sqli-labs_less8 布尔盲注脚本
  • ST产品型号解析
  • conda使用记录
  • 题解:P4895 独钓寒江雪
  • 题解:CF1037E Trips
  • 题解:CF387E George and Cards
  • 题解:CF712D Memory and Scores
  • 拾壹月贰
  • [题解]CSP-S 2025 T1~T3 题解
  • CSP-S游记
  • NOIP 2025 游记 退役记
  • 一个万古常青的、小而美的输入法
  • 条件表达式中的赋值问题
  • Jenkins-CICD项目自动化部署
  • 第k小的数的分治算法
  • 一个灵感:思维的断章
  • 10.30总结
  • 世界计划:无法歌唱的初音未来
  • 一、RK3562板卡上手
  • 2025 年 11 月数控激光去毛刺机,冲压件去毛刺机,精密去毛刺机厂家最新推荐,实力品牌深度解析采购无忧之选!
  • AT ARC156C Tree and LCS 题解
  • CSPT漏洞浅析
  • Awesome Neovim - 精选Neovim插件大全
  • 不会AI编程?没关系!这几个框架也让你也能开发AI聊天助手!
  • 别只怪客户端宕机!还有这些导致 Redis 分布式锁“死锁”的原因 - 公众号
  • 第13天(中等题 滑动窗口)
  • 我重生了,重生到了CSP前——高中物理电学速通
  • 第二章算法作业