一、线路连接图
二、代码展示
#include "stm32f10x.h"
#include "delay.h"
int main(void)
{
/*开启时钟*/
//要点亮PAO口的LED,所以外设选择RCC_APB2外设GPIOA这一项,放到第一个参数,ENABLE使能开启
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟
//使用各个外设前必须开启时钟,否则对外设的操作无效
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ; //GPIO引脚,赋值为所有引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,赋值为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //将赋值后的构体变量传递给GPIO_Init函数
//函数内部会自动根据结构体的参数配置相应寄存器
//实现GPIOA的初始化
while(1)
{
//低电平点亮要加一个按位取反
GPIO_Write(GPIOA,~0x0001);//0000 0000 0000 0001
Delay_ms(500);
GPIO_Write(GPIOA,~0x0002);//0000 0000 0000 0010
Delay_ms(500);
GPIO_Write(GPIOA,~0x0004);//0000 0000 0000 0100
Delay_ms(500);
GPIO_Write(GPIOA,~0x0008);//0000 0000 0000 1000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0010);//0000 0000 0001 0000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0020);//0000 0000 0010 0000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0040);//0000 0000 0100 0000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0080);//0000 0000 1000 0000
Delay_ms(500);
}
}
三、代码的解释笔记
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
可以通过按位或,对引脚进行赋值
或者直接用GPIO_Pin_All 直接对16个端口进行赋值
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
PortVal: specifies the value to be written to the port output data register.
PortVal:指定要写入端口输出数据寄存器的值
GPIOx->ODR = PortVal;
第二个参数是直接写道ODR上的
写0x0001对应的二进制0000 0000 0000 0001
第一个点亮其他的都熄灭