前言
本文章是于hal库进行生成操作的,参考了stm32f103数据手RCC,和gpio外设寄存器,被操作是在普中stm32f103zet6开发板完成。
查看原理图
我们可以看到此开发板的led灯接到单片机的PC口,并且是共阳极连接,此时我们只需要给他一个低电平就可以点亮ta。
查看手册
我们打开stm32f103数据手册找到框架图查看gpioc挂在那个总线上,我们可以在框架图看到ta挂在了APB2总线上,接下来我们转到参考手册找到RCC寄存器描述,找到,APB2 外设时钟使能寄存器(RCC_APB2ENR)
接下来我们在程序里就对这个寄存器进行操作。
操作 RCC_APB2ENR 寄存器
RCC->APB2ENR|=(1<<4);
我们直接与上1<<4位将IOPCEN位置1即可开启端口时钟。
查看手册GPIO相关寄存器
我们先找到 端口配置低寄存器(GPIOx_CRL)
因为我们要配置第一个led灯(PC0)点亮所以我们选择CRL低位配置寄存器,接下来我们进行配置,我们可以看到一个IO口涉及到4位寄存器配置,前两位用与配置端口的模式,后两位用于配置端口的速度,接下来我们开始配置。
操作 GPIOx_CRL 寄存器
GPIOC->CRL|=0X03<<(0*4);
我们将PC端口配置为输出推完模式,且输出模式霞最大速度位50MHZ,及0x03,因为一个io配置是4位所以我们配置地址以4位向前移,因为我们配置的PC0所以向前移动0位。
数据输出寄存器ODR
接下来我们配置端口输出数据寄存器,就是让ta输出1还是0,下面上代码
GPIOC->ODR&=~(1<<0);
我们直接配置ODR寄存器的第0位让他输出0即可。
到这里我们就配置完了,我们看看效果吧。
结果
成功点亮
如果要让ta熄灭d话直接对输出数据寄存器写1即可
GPIOC->ODR|=(1<<0);
完整代码
int main(void)
{
/* USER CODE BEGIN 1 */
RCC->APB2ENR|=(1<<4);
GPIOC->CRL|=0X03<<(0*4);
GPIOC->ODR&=~(1<<0);
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}