STM32F103C8T6 GPIOA_BSRR 寄存器操作详解
STM32F103C8T6 GPIOA_BSRR 寄存器操作详解
本文将介绍如何使用直接寄存器操作的方式控制 STM32F103C8T6 单片机的 GPIOA_BSRR 寄存器,并以点亮 LED 灯为例进行说明。
代码示例
以下是将 GPIOA 的 Pin 5 设置为高电平,从而点亮 LED 灯的代码:
// 将 GPIOA 的 Pin 5 设置为输出模式
*((volatile uint32_t *)0x40021000) |= (1 << 5);
// 将 GPIOA 的 Pin 5 设置为高电平
*((volatile uint32_t *)0x40010810) = (1 << 5);
其中:
0x40021000是 GPIOA 的 CRL 寄存器地址,用于配置 Pin 0-7 的模式。0x40010810是 GPIOA 的 BSRR 寄存器地址,用于设置或清除引脚的输出电平。(1 << 5)表示将第 5 位设置为 1,对应 GPIOA 的 Pin 5。
优化建议
虽然直接寄存器操作效率高,但可读性较差。建议使用 STM32 标准库或 HAL 库进行开发,以提高代码的可读性和可维护性。
以下是用 STM32 标准库实现相同功能的代码:
// 初始化 GPIOA
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 将 GPIOA 的 Pin 5 设置为高电平
GPIO_SetBits(GPIOA, GPIO_Pin_5);
使用标准库可以使代码更易于理解和维护,同时也能利用库函数提供的错误检查等功能,提高代码的健壮性。
原文地址: https://www.cveoy.top/t/topic/fNpn 著作权归作者所有。请勿转载和采集!