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

本文主要是介绍STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 课程概述(297.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)

在这里插入图片描述

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」;
  2. 左上角搜索对应的芯片,并在右侧双击对应的芯片;
    在这里插入图片描述
  3. 点击芯片对应的引脚,并进行配置;(Serial Wire:可做重复的修改)
    在这里插入图片描述
  4. 配置工程名称及位置:
    在这里插入图片描述

Toolchain / IDE:MDK-ARM(启用此选项后,在生成代码之后可自动调用 Keil5 开启此项目)
在这里插入图片描述
5. 按下图配置 Coder Generator :(仅拷贝需要的库文件)(针对外设的固件库生成.c.h匹配的源文件)
在这里插入图片描述
6. 点击右上角 generate code :
在这里插入图片描述
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单片机简介

在这里插入图片描述

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的。
在这里插入图片描述

  • 内部框架图
    下图来源于官方参考手册,了解即可。
    在这里插入图片描述

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

  • 内部结构图
    在这里插入图片描述
  • 推挽输出: 可以真正能真正的输出高电平和低电平
  • 开漏输出: 开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动

这篇关于STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334818

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

C++ Primer 标准库vector示例详解

《C++Primer标准库vector示例详解》该文章主要介绍了C++标准库中的vector类型,包括其定义、初始化、成员函数以及常见操作,文章详细解释了如何使用vector来存储和操作对象集合,... 目录3.3标准库Vector定义和初始化vector对象通列表初始化vector对象创建指定数量的元素值

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物