这是本文档旧的修订版!
保护电路:输入电压大于3v3,保护二极管从输入向3v3放电;输入电压小于0v,保护二极管从0v向输入放电;输入介于0v-3v3,保护二极管不放电,正常工作。 上/下拉电阻:当引脚处于悬空状态时,引脚电位极易受到外界扰动而改变。在悬空时,上/下拉电阻可以保持设置的电位。上/下拉电阻阻值较大,为弱上/下拉。 下图是施密特触发器的工作原理:
GPIO工作模式(GPIO_InitStructure.GPIO_Mode):
GPIO输出速度(GPIO_InitStructure.GPIO_Speed):
可以限制gpio引脚输出时的最大翻转速度,用来保证稳定性和低功耗。
点灯(先直接上代码):
#include "stm32f10x.h" // Device header int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 开启APB2外设时钟 GPIO_InitTypeDef GPIO_InitStructure; // GPIO_InitTypeDef类型的结构体,名为GPIO_InitStructure,这是官方推荐用名 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // 13引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 模式:universal push-pull output (通用推挽输出) GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度50Mhz GPIO_Init(GPIOC, &GPIO_InitStructure); // 初始化GPIOC // GPIO_SetBits(GPIOC, GPIO_Pin_13); // 置高电平 GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 置低电平 // 看你的led另一个脚接的正极还是负极来定,此处led另一脚接正 while(1); // 主循环保持程序运行,不断执行空操作 }
操作stm32的GPIO需要三个步骤:
1. 使用RCC开启GPIO的时钟。 2. 使用GPIO_Init()函数初始化GPIO(一个结构体对象)。 3. 使用输入/输出函数控制GPIO口。
常用的stm32f10x_rcc.h中的函数:
RCC_AHBPeriphClockCmd()、RCC_APB2PeriphClockCmd()、RCC_APB1PeriphClockCmd() 不同的外设挂载在不同的总线上,具体如下图: