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位访问

相关推荐
树的枝18 小时前
【STM32】03.中断和EXTI外设
笔记·stm32·单片机·嵌入式硬件
单片机杂货铺19 小时前
【单片机毕业设计选题】基于stm32单片机儿童公路车速度检测报警
stm32·单片机·嵌入式硬件·51单片机·硬件工程·课程设计
振南的单片机世界20 小时前
看门狗硬核拆解:1.6秒不喂狗,硬件强制“掀桌子”
arm开发·stm32·单片机·嵌入式硬件
嵌入式阿蔡20 小时前
Linux_01:交叉编译与开发环境实战——从单片机跨到 Linux 的第一道坎
linux·运维·网络·单片机·嵌入式硬件·嵌入式实时数据库
NYFEA1 天前
徕飞 FCA系列全面上新,一站式I/O扩展国产替代方案
单片机·嵌入式硬件
国科安芯1 天前
ASL622S:把“信号失真“挡在门外的航天级运放
网络·单片机·嵌入式硬件·架构·状态模式·低轨卫星星座
XiHongShi20161 天前
STM32H7 FLASH和SRAM标准例程
stm32·单片机·嵌入式硬件
单片机杂货铺1 天前
【单片机毕业设计选题】基于单片机的智能牛奶保鲜箱设计
人工智能·stm32·单片机·物联网·毕业设计·课程设计
捷瑞电子工坊1 天前
FreeRTOS任务管理:从入门到实践(标准库版)
stm32·嵌入式·freertos·实时操作系统·任务管理·标准外设库·任务挂起与恢复
莫浅子2 天前
day01-USB架构与枚举
c++·单片机·嵌入式驱动