STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出

1. 课程概述(297.1)

STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第1张图片

  • 课程要求:C语言熟练,提前学完 C51

2. 开发软件Keil5的安装(298.2)

开发环境的安装

  • 编程语言:C语言
  • 需要安装的软件有两个:Keil5 和 STM32CubeMX

Keil5 的安装

使用 Keil4 写 STM32 代码其实也是可以,但需要很复杂的配置,不建议新手操作。
比较推荐 Keil5 编写 STM32 ,只需要一些简单的设置就可以上手,对新手友好。

  • 安装
    • 安装包(不需要太新,本课程以 MDK324 为例,最新的 MDK327 有问题)
    • 安装过程一路下一步即可(建议不要安装在 C 盘)
    • 安装路径一定不要有中文或空格!!(重要)
    • Keil5 安装完之后,记得安装 F1 固件包
  • 破姐
  • 使用
    • 编程与编译过程与 Keil4 完全一样

3. STM32模板工程的创建与使用(299.3)

STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第2张图片

4. 如何下载程序到STM32单片机(300.4)

烧录工具有很多种,比如:串口、J-Link、ST-Link、U-Link 等等,本教程使用 ST-Link。

  • 安装驱动
    • 官网下载(慢)https://www.st.com/en/development-tools/stsw-link009.html
    • 资料包
  • 接线
  • 配置
  • 代码测试(Template/USER)
int main(void)
 {	//跑马灯效果,闪烁比较快
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_SetBits(GPIOB, GPIO_Pin_8 | GPIO_Pin_9);	
  while(1)
	{
	  GPIO_ResetBits(GPIOB,GPIO_Pin_8);
	  GPIO_SetBits(GPIOB,GPIO_Pin_9);
		Delay(3000000);
		GPIO_SetBits(GPIOB,GPIO_Pin_8);
		GPIO_ResetBits(GPIOB,GPIO_Pin_9);
		Delay(3000000);
	}
 }

5. STM32CubeMX的安装(301.5)

  • 作用
    • 通过界面的方式,快速生成工程文件。
  • 下载
    • 官网(慢)https://www.st.com/zh/development-tools/stm32cubemx.html#overview
    • 资料包
  • 安装
    • 一路下一步,建议不要安装在C盘
  • 配置
    • 更新固件包位置(比较大,默认在C盘,可以更改到其它盘)
      • help —> update settings --> Firmware Repository

6. 使用STM32CubeMX生成工程文件(302.6)

  1. 点击「ACCESS TO MCU SELECTOR」;(自己创建工程目录)(下面俩是根据st官方生成的工程文件)
    STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第3张图片
  2. 左上角搜索对应的芯片,并在右侧双击对应的芯片;
  3. 点击芯片对应的引脚,并进行配置;(Serial Wire:可做重复的修改)
    STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第4张图片
  4. 配置工程名称及位置:(工程名称不能有空格)(位置不能有中文)
    STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第5张图片

Toolchain / IDE:MDK-ARM(启用此选项后,在生成代码之后可自动调用 Keil5 开启此项目)
STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第6张图片
5. 按下图配置 Coder Generator :(仅拷贝需要的库文件)(针对外设的固件库生成.c.h匹配的源文件)
STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第7张图片
6. 点击右上角 generate code :
STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第8张图片
7. 点击 Open Project 即可调用 Keil5 打开自动生成的工程文件。

  • 代码(gpio_test/MDK-ARM)
//main.c int main(){}
while (1)
  {//跑马灯效果:led1亮 led2灭 led1灭 led2亮 
    /* USER CODE END WHILE */
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
		HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  }

7. STM32介绍(303.7)(*面试会问)

什么是单片机?

单片机(Single-Chip Microcomputer)是一种集成电路芯片,
把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,
在工业控制领域广泛应用。

STM系列单片机命名规则(*面试会问)

  • ST – 意法半导体
  • M – Microelectronics 微电子
  • 32 – 总线宽度
    STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第9张图片

STM32F103C8T6单片机简介

STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第10张图片

8. 标准库与HAL库区别(304.8)

  1. 寄存器
  • 寄存器众多,需要经常翻阅芯片手册,费时费力;
  • 更大灵活性,可以随心所欲达到自己的目的;
  • 深入理解单片机的运行原理,知其然更知其所以然。
  1. 标准库
  • 将寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用
  • 每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx…之类的;
  • 配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能;
  • 大大降低单片机开发难度,但是在不同芯片间不方便移植。
  1. HAL库
  • ST公司目前主力推的开发方式,新的芯片已经不再提供标准库;
  • 为了实现在不同芯片之间移植代码;
  • 为了兼容所有芯片,导致代码量庞大,执行效率低下。

9. 什么是GPIO口(305.9)

  • 定义
    GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
    简单来说我们可以控制GPIO引脚的电平变化,达到我们的各种目的。
  • 命名规则
    组编号+引脚编号
    • 组编号:GPIOA, GPIOB, GPIOC, GPIOD … GPIOG
    • 引脚编号:0,1,2,3,4…15

组合起来:
PA0, PA1, PA2 … PA15
PB0, PB1, PB2 … PB15
PC0, PC1, PC2 … PC15

有一些特殊功能的引脚是不能用作IO的。
STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第11张图片

  • 内部框架图
    下图来源于官方参考手册,了解即可。
    STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第12张图片

10. 推挽输出与开漏输出(306.10)

  • 内部结构图
    STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出_第13张图片
  • 推挽输出(Output Push Pull): 可以真正能真正的输出高电平和低电平
  • 开漏输出(Output Open Drain): 开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动

你可能感兴趣的:(stm32,嵌入式硬件,单片机)