标准库 :以led为例子
一般输出使用的是
GPIO_Mode_Out_PP//开漏输出,只能输出低电平,外部不接上拉电阻时,所以要想输出高电平必须要外接上拉电阻
GPIO_MODE_OUTPUT_OD // 推挽式输出,可以输出强高低电平,连接数字其间。例如IIC (SCL,SDA)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //复用功能启用,就是引脚的第二个功能打开
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO_MODE_OUTPUT_OD //在这里改输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
输入一般使用的是
GPIO_Mode_IPU 上拉输入等
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //复用功能启用,就是引脚的第二个功能打开
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //在这里改输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO的常用功能
GPIO_ResetBits(GPIOA, GPIO_Pin_0); //io拉低
GPIO_SetBits(GPIOA, GPIO_Pin_1); //io拉高
完整程序
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //复用功能启用,就是引脚的第二个功能打开
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO_MODE_OUTPUT_OD //在这里改输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_0); //io拉低
GPIO_SetBits(GPIOA, GPIO_Pin_1); //io拉高
}
}
Hall库:c8t6
会直接配置好72MHZ,静心等待即可。
输入与输出在这里配置
选择好,进入下一步
确定即可
SystemClock_Config();//系统时钟初始化
MX_GPIO_Init();//gpio初始化
while (1)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//PA5亮灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);//PB9熄灯
HAL_Delay(1000);//延时1s
}
led就会亮和灭。
注意:Hall函数有文件保护,要写在注释之间