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

STM32F103C8T6 IO 操作

1.开启相关时钟

        在 STM32 微控制器中,开启 GPIO 端口的时钟是确保 IO 口可以正常工作的第一步。

查找 RCC 寄存器使能时钟

        在 STM32 中,时钟控制的寄存器通常位于 RCC (Reset and Clock Control) 模块中。不同的 STM32 系列(如 STM32F1、STM32F4 等)具有不同的寄存器地址。

通过查看参考手册系统架构可以找到GPIO口是在APB2下的。

        查找要开启时钟的寄存器,然后通过该寄存器操作时钟的开启或关闭。比如要打开IOPA的时钟就要操作该寄存器的第二位IOPAEN为1,就需要知道RCC_APB2ENR这个寄存器的地址。

RCC的基地址加上这个寄存器的偏移地址就是这个寄存器的实际地址。

比如我要使能GPIOA的时钟

RCC的基地址是0x4002 1000,APB2ENR的偏移量是0x18,所以APB2ENR的地址值是0x4002 1000 + 0x18 = 0x4002 1018

在这个地址写入1,这样就开启了GPIOA的时钟。

在代码中,需要把地址强转成指针才能给这个地址赋值。

*(uint32_t *)(0x40021000 + 0x18) = 0x04;

这样就开启了GPIOA的时钟。

2.给IO口设置模式输出电平

找到GPIOx的基地址,再根据偏移地址找到要使用的寄存器的地址。

如GPIOA的基地址是0x4001 0800 + 0x00,PA0的输出模式寄存器是GPIOA_CRL。

配置MODE0 = 11 输出模式Max50MHz , CNF0 = 00 通用推挽输出模式 (0011)0x3

*(uint32_t *)(0x40010800 + 0x00) = 0x03;

ODR寄存器的地址是 0x40010800 + 0x0c ,设置PA0为高电平。

*(uint32_t *)(0x40010800 + 0x0c) = 0x01;

I/O端口寄存器须按32位访问


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

相关文章:

  • 华为云开源项目Sermant正式成为CNCF官方项目
  • 基于SSM+小程序的购物管理系统1
  • ffmpeg拉流分段存储到文件-笔记
  • v4.7版本使用线下付款方式不给管理员发送新订单通知问题修复
  • 【C++初阶】模版入门看这一篇就够了
  • Objective-C 音频爬虫:实时接收数据的 didReceiveData_ 方法
  • DevOps赋能:优化业务价值流的实战策略与路径(下)
  • ViSual studio如何安装 并使用GeographicLib
  • 大模型提示词简介 举例
  • zjy-sqlite-manage使用文档v1
  • 每日读则推(十四)——Meta Movie Gen: the most advanced media foundation models to-date
  • 等保行业如何选择核实的安全防御技术
  • Python 机器学习中的模型解释性与可解释性
  • 有防蓝光的护眼灯有哪些品牌?介绍五款值得入手的品牌和型号
  • 深度学习-交叉熵损失函数
  • Django ORM 数据库管理 提高查询、更新性能的技巧和编程习惯:
  • ECharts 折线图 / 柱状图 ,通用配置标注示例
  • OpenCV基本操作(python开发)——(8)实现芯片瑕疵检测
  • 【GPT模型的大小】GPT3模型到底多大,如果训练需要什么条件?
  • 盘古信息IMS系统助力制造企业释放新质生产力
  • 上市公司数字经济与实体经济融合发展程度测算数据(2008-2022年)-最新出炉_附下载链接
  • 基于华为atlas环境下的OpenPose人体关键点检测的人员跨越、坐立检测
  • Mybatis-15.动态SQL-if
  • 【Hadoop之hdfs】hdfs一些简单明了的总结(一篇足以,字少但都是精华)
  • pytest 单元框架里,前置条件
  • MySQL数据集成至金蝶云星空的解决方案