购物网站系统建设方案,申请网站建设,常德企业网站建设,网站备案现状目录 初识STM32单片机
什么是单片机#xff1f;
STM系列单片机命名规则
STM32F103C8T6单片机简介
标准库与HAL库区别
通用输入输出端口GPIO
什么是GPIO#xff1f;
定义
命名规则
内部框架图
推挽输出与开漏输出
如何点亮一颗LED灯
编程实现点灯
按键点亮LED灯…目录 初识STM32单片机
什么是单片机
STM系列单片机命名规则
STM32F103C8T6单片机简介
标准库与HAL库区别
通用输入输出端口GPIO
什么是GPIO
定义
命名规则
内部框架图
推挽输出与开漏输出
如何点亮一颗LED灯
编程实现点灯
按键点亮LED灯轮询法 初识STM32单片机
什么是单片机 单片机Single-Chip Microcomputer是一种集成电路芯片把具有数据处理能力的中央处 理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功 能可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路集成 到一块硅片上构成的一个小而完善的微型计算机系统在工业控制领域广泛应用。 STM系列单片机命名规则 ST -- 意法半导体 M -- Microelectronics 微电子 32 -- 总线宽度 STM32F103C8T6单片机简介 标准库与HAL库区别 1. 寄存器 寄存器众多需要经常翻阅芯片手册费时费力 更大灵活性可以随心所欲达到自己的目的 深入理解单片机的运行原理知其然更知其所以然。 2. 标准库 将寄存器底层操作都封装起来提供一整套接口API供开发者调用每款芯片都编写了一份库文件也就是工程文件里stm32F1xx…之类的 配置结构体变量成员就可以修改外设的配置寄存器从而选择不同的功能 大大降低单片机开发难度但是在不同芯片间不方便移植。 3. HAL库 ST公司目前主力推的开发方式新的芯片已经不再提供标准库 为了实现在不同芯片之间移植代码 为了兼容所有芯片导致代码量庞大执行效率低下。 通用输入输出端口GPIO 什么是GPIO 定义 GPIO是通用输入输出端口的简称简单来说就是STM32可控制的引脚STM32芯片的GPIO引脚与 外部设备连接起来从而实现与外部通讯、控制以及数据采集的功能。 简单来说我们可以控制GPIO引脚的电平变化达到我们的各种目的。 命名规则 组编号引脚编号 组编号GPIOA, GPIOB, GPIOC, GPIOD .. GPIOG 引脚编号01234...15 组合起来 PA0, PA1, PA2 .. PA15 PB0, PB1, PB2 .. PB15 PC0, PC1, PC2 .. PC15 ... 有一些特殊功能的引脚是不能用作IO的。 内部框架图 下图来源于官方参考手册了解即可。 推挽输出与开漏输出 内部结构图 推挽输出 可以真正能真正的输出高电平和低电平 开漏输出 开漏输出无法真正输出高电平即高电平时没有驱动能力需要借助外部上拉电阻完 成对外驱动 如何点亮一颗LED灯 标号一样的导线在物理上是连接在一起的。 将PB8或PB9拉低就可以实现将对应的LED灯点亮。 编程实现点灯 常用的GPIO HAL库函数 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 结构体 GPIO_InitTypeDef 定义 typedef struct { uint32_t Pin; uint32_t Mode; uint32_t Pull; uint32_t Speed; } GPIO_InitTypeDef; 按键点亮LED灯轮询法
输入按键 KEY1PA0 KEY2PA1
输出LED灯 LED1PB8 LED2PB9
#define KEY_ON 0
#define KEY_OFF 1
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{if( HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) GPIO_PIN_RESET)
{
/* 按键按下 */return KEY_ON;
}
else
{
/* 按键松开 */while(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) GPIO_PIN_RESET);return KEY_OFF;
}
}
while (1)
{/* USER CODE END WHILE */if(Key_Scan(GPIOA,GPIO_PIN_0) KEY_ON)HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);if(Key_Scan(GPIOA,GPIO_PIN_1) KEY_ON)HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);/* USER CODE BEGIN 3 */
}