写出stm32F103的三种操作点亮LED灯的代码
时间: 2023-12-10 14:06:09 浏览: 31
1. 使用库函数操作点亮LED灯:
#include "stm32f10x.h"
void GPIO_Configuration(void);
int main()
{
GPIO_Configuration(); // 配置GPIO口
while(1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_0); // 点亮LED灯
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 配置GPIOA的第0位为输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA
}
2. 使用寄存器直接操作点亮LED灯:
#include "stm32f10x.h"
int main()
{
GPIOA->CRL &= ~(0xf << 0); // 将GPIOA第0位清零,即配置为推挽输出
GPIOA->CRL |= (0x3 << 0); // 配置GPIOA的第0位为输出,速度50MHz
while(1)
{
GPIOA->BSRR |= (1 << 0); // 点亮LED灯
}
}
3. 使用位带操作点亮LED灯:
#include "stm32f10x.h"
#define LED_ON 0x42000000 // GPIOA第0位置1的地址
#define LED_OFF 0x42000100 // GPIOA第0位清零的地址
int main()
{
GPIOA->CRL &= ~(0xf << 0); // 将GPIOA第0位清零,即配置为推挽输出
GPIOA->CRL |= (0x3 << 0); // 配置GPIOA的第0位为输出,速度50MHz
while(1)
{
*((unsigned int*)LED_ON) = 1; // 点亮LED灯
}
}