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

[STM32C0] 【STM32C092RC 测评】GPIO操作

STM32C092RC 的 GPIO 配置虽然比 51 单片机复杂点,但官方库函数HAL/LL 库已经封装好了,照着例程改引脚号和参数就能用。

开时钟(让 GPIO 模块通电)

设置模式(输入/输出/上拉/下拉)

读写引脚(直接赋值 1 或 0)

虽然寄存器操作对新手不友好,建议直接用库函数,别硬啃手册,其实说白了就是那几个步骤。

STM32C092RC 有 32 个 GPIO 引脚具体型号可能不同,大部分支持复用功能UART、I2C、PWM 等一些外设。

GPIO 速度和驱动能力支持 2MHz/10MHz/50MHz 三种输出速度,实际是驱动能力调节,不是通信速率。

这里就不多讲了,现在开始对C092进行认真的了解与熟悉。

GPIO主要特性

输出状态:推挽或开漏+上拉/下拉

从输出数据寄存器(GPIOXODR)或外设(复用功能输出)输出数据

可为每个//0选择不同的速度输入

状态:浮空、上拉/下拉、I/0模拟模式

将数据输入到输入数据寄存器(GPIOxIDR)或外设(复用功能输入)

置位和复位寄存器(GPIOxBSRR),对GPIOxODR具有按位写权限

锁定机制(GPIOx LCKR),可冻结//0 端口配置模拟功能复用功能选择寄存器(一个 10 最多可具有 16 个复用功能)快速翻转,每次翻转最快只需要两个时钟周期引脚复用非常灵活,允许将/0 引脚用作 GPI0 或多种外设功能中的一种GPI0 功能描述根据数据手册中列出的每个 !/0端口的特性,可通过软件将通用 I/O(GPIO) 端口的各个端口位分别配置为多种模式:输入浮空输入上拉输入下拉模拟具有上拉或下拉功能的开漏输出具有上拉或下拉功能的推挽输出具有上拉或下拉功能的复用功能推换具有上拉或下拉功能的复用功能开漏

框图

下面看一下框图:

输出配置:

功能配置:

通用 I/0 (GPIO)

在复位期间及复位刚刚完成后,复用功能尚未激活,大多数 I0 端口被配置为模拟模式。复位后,调试引脚处于复用功能上拉/下拉状态:

PA14:SWCLK 处于下拉状态

PA13:SWDIO 处于上拉状态

PA14 与BOOT0 功能共用。使用时需小心谨慎,因为调试器件可能会篡改BOOTO 引脚值。当引脚配置为输出后,写入到输出数据寄存器(GPIOx ODR) 的值将在 I/0 引脚上输出。可以在推挽模式下或开漏模式(仅驱动低电平,高电平为高阻态)下使用输出驱动器。输入数据寄存器(GPIOx IDR) 每隔1个 AHB 时钟周期捕获一次 I/O 引脚的数据。所有 GPIO 引脚都具有内部弱上拉及下拉电阻,可根据 GPIOx PUPDR 寄存器中的值来打开/关闭。

GPIO 引脚支持以下工作模式:

GPIO:输出、输入或模拟 I/0,具体取决于 GPIOx MODER 寄存器设置复用功能

具有调试复用功能的 GPIO 在复位后设为复用功能模式。

附加功能

仅限部分 GPIO 引脚,附加功能模式通过相应功能模块(例如 ADC、DAC、RTC、RCC 和 PWR)的控制寄存器来设置,与 GPIOx MODER 寄存器设置无关。当某个 I/0 设为附加功能模式时,建议在 GPIOx MODER 寄存器中将其相应的 GPIO复用器设为模拟模式。

寄存器

GPIO 端口模式寄存器(GPIOX MODER)(x=A、B、C、D 和 F)

GPlO port mode register

偏移地址:0x00

复位值:0xEBFF FFFF(端口A)

复位值:0XFFFF FFFF(端口A以外的端口)

位 31:0 MODEy[1:0]: |/0y的端口x配置(Port x configuration for l/0 y)(y= 15 到 0)这些位通过软件写入,用于将 1/0 设为四种工作模式之一。00:输入

01:输出

10:复用功能

11:模拟

GPI0 端口输出类型寄存器(GPIOXOTYPER)(x=A、B、C、D和F)

GPlO port output type register

偏移地址:0x04

复位值:0x0000 0000

GPI0 端口输出速度寄存器(GPIOXOSPEEDR)(x=A、B、C、D和F)

GPlO port output speed register

偏移地址:0x08

复位值:0xOC00 0000(端口A)

复位值:0x0000 0000(端口A以外的端口)

这里就把几个基本的例出来。

代码

复制

  1. LED1_GPIO_CLK_ENABLE();
  2. LED2_GPIO_CLK_ENABLE();
  3. /* -2- Configure IO in output push-pull mode to drive external LEDs */
  4. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  5. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  7. GPIO_InitStruct.Pin = LED1_PIN;
  8. HAL_GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStruct);
  9. GPIO_InitStruct.Pin = LED2_PIN;
  10. HAL_GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStruct);
  11. /* USER CODE END 2 */
  12. /* Infinite loop */
  13. /* USER CODE BEGIN WHILE */
  14. while (1)
  15. {
  16. /* USER CODE END WHILE */
  17. /* USER CODE BEGIN 3 */
  18. HAL_GPIO_TogglePin(LED1_GPIO_PORT, LED1_PIN);
  19. /* Insert delay 100 ms */
  20. HAL_Delay(100);
  21. HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
  22. /* Insert delay 100 ms */
  23. HAL_Delay(100);

效果



http://www.jsqmd.com/news/173111/

相关文章:

  • Java毕设选题推荐:基于SpringBoot社区医疗预约挂号平台的设计与实现基于SpringBoot + Vue的医院预约挂号系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 大数据时代,为什么每个企业都需要BI工具?深度解析
  • C语言随堂笔记-10
  • [STM32C0] 【STM32C092RC 测评】+ 03 板载串口2输出测试
  • 个人知识库新选择
  • A.每日一题——2402. 会议室 III
  • 2026最新品牌环保板材厂商top10推荐!山东等地优质公司及生产厂家选择指南,ENF级环保与创新服务双优品牌推荐 - 全局中转站
  • c编译器并不难,Turbo c编译器介绍(上篇)
  • [STM32C0] 【STM32C092RC 测评】+08 定时器1输出可变脉宽
  • 2000-2024年各省、地级市银行竞争度HHI数据
  • HttpWebRequest 进行异步Post 网络访问/数据流形式获取数据(Task/async/await)的代码简单实现
  • 2026年数据可视化工具首选!万维易源(DataGear)使用指南
  • Dify MCP 接入踩坑实录:notifications/initialized 的终极解法
  • 2025年市面上靠谱的内螺纹法兰选哪家怎么选择,方法兰/分体法兰/SAE法兰/扩口法兰,内螺纹法兰选哪家推荐排行 - 品牌推荐师
  • 翻译:Akin 的航天器设计法则
  • 用 100 倍 Token 换取 10% 体验:关于 AI Agent 的“暴力美学”
  • 拥抱大数据领域数据服务,迎接数字时代挑战
  • 还搞不懂http请求方法?一篇讲清所有用法和坑点!
  • 不用切换软件!一站式创意设计画布 AI 工具,跨模态设计无缝衔接
  • 大数据领域Kafka在社交媒体数据处理中的应用
  • 深入解析:机器学习在验证码识别中的应用实践
  • 英语_错题集_26-01
  • 2025专科生必看!10个AI论文工具测评,写毕业论文不再愁
  • 12月阅读笔记(2)
  • 实验四 ysy
  • 启用alist+RaiDrive+webdav将百度夸克网盘变为本地电脑磁盘方法教程
  • 12月阅读笔记(3)
  • AdStyle:LLM自我进化,生成攻击 Prompt
  • 中美AI较量
  • Quartus Prime 新手完全使用指南