STM32 极速入门第一天 点亮一个LED( 使用PlatformIO开发STM32单片机 ) 2024/11/11

什么是STM32?

STM32是STMicroelectronics(意法半导体)推出的一系列基于ARM Cortex-M内核的32位Flash微控制器。它们因高性能、低功耗、易于编程和广泛的外设集成而广泛应用于各种嵌入式系统项目中。

使用设备: STM32F103C6T6

我的 keil 装的是 C51 所以这里用 VS code  中  PlatformIO 建立工程 配置参考 博主 ODF..icon-default.png?t=O83Ahttps://blog.csdn.net/DOF526570/article/details/130115865

添加一些配置 platformIO官方文档 stm32icon-default.png?t=O83Ahttps://docs.platformio.org/en/latest/platforms/ststm32.html

 

[env:genericSTM32F103C6]

platform = ststm32

board = genericSTM32F103C6

framework = stm32cube

upload_protocol = stlink   //用stlink 下载

upload_speed = 961200 //下载波特率设置

在src文件夹下创建main文件并上传测试

 

控制pc13 io 电平变化

库相关资料:

stm32f1xx_ll_gpio.hstm32f1xx_hal_gpio.h 都是STM32F1系列微控制器的GPIO驱动库,但它们在设计理念、使用方式和性能方面有所不同。以下是两者的对比:

1. 设计理念

  • HAL库 (stm32f1xx_hal_gpio.h)
    • 硬件抽象层:HAL库提供了一个高度抽象的接口,使得开发者可以更容易地使用GPIO功能,而不需要深入了解底层硬件细节。
    • 易用性:HAL库提供了丰富的函数和结构体,简化了GPIO的配置和操作。
    • 可移植性:HAL库设计为跨平台使用,可以在不同的STM32系列之间轻松移植代码。
  • LL库 (stm32f1xx_ll_gpio.h)
    • 低层抽象:LL库提供了一个更接近硬件的接口,允许开发者更精细地控制GPIO引脚。
    • 灵活性:LL库提供了更多的配置选项,适合需要高性能和精细控制的应用。
    • 性能:由于减少了抽象层,LL库在某些情况下可以提供更好的性能。

2. 功能和使用

  • HAL库 (stm32f1xx_hal_gpio.h)
    • 数据结构
      • GPIO_InitTypeDef:用于初始化GPIO引脚的结构体,包含引脚编号、模式、速度等配置参数。
    • 函数
      • HAL_GPIO_Init:初始化GPIO引脚。
      • HAL_GPIO_DeInit:反初始化GPIO引脚。
      • HAL_GPIO_WritePin:设置GPIO引脚的输出电平。
      • HAL_GPIO_ReadPin:读取GPIO引脚的输入电平。
      • HAL_GPIO_TogglePin:切换GPIO引脚的输出电平。
      • HAL_GPIO_LockPin:锁定GPIO引脚的配置,防止后续修改。
  • LL库 (stm32f1xx_ll_gpio.h)
    • 数据结构
      • GPIO_TypeDef:定义了GPIO端口的寄存器结构。
    • 函数
      • LL_GPIO_Init:初始化GPIO引脚。
      • LL_GPIO_DeInit:反初始化GPIO引脚。
      • LL_GPIO_SetOutputPin:设置GPIO引脚的输出电平。
      • LL_GPIO_ResetOutputPin:重置GPIO引脚的输出电平。
      • LL_GPIO_TogglePin:切换GPIO引脚的输出电平。
      • LL_GPIO_GetInputPinState:读取GPIO引脚的输入电平。
      • LL_GPIO_SetPinMode:设置GPIO引脚的模式(输入、输出等)。
      • LL_GPIO_SetPinSpeed:设置GPIO引脚的速度。
      • LL_GPIO_SetPinPull:设置GPIO引脚的上拉/下拉电阻。

3. 性能和效率

  • HAL库
    • 执行效率:由于增加了抽象层,HAL库在某些情况下可能不如LL库高效。
    • 代码体积:HAL库通常会产生较大的代码体积,因为它提供了更多的功能和抽象。
  • LL库
    • 执行效率:LL库由于减少了抽象层,通常具有更高的执行效率。
    • 代码体积:LL库产生的代码体积通常较小,因为它提供了更少的抽象和更直接的硬件访问。

4. 使用场景

  • HAL库
    • 初学者:适合初学者和需要快速开发项目的开发者,因为HAL库提供了简单易用的接口。
    • 跨平台开发:适合需要在不同STM32系列之间移植代码的项目。

例程:

#include "stm32f1xx_hal.h"
 
void GPIO_Init(void)
{
    // 初始化GPIO 
    __HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟 
 
    GPIO_InitTypeDef GPIO_InitStruct = {0};
 
    // 配置GPIOA第0引脚为输出模式 
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
    // 设置GPIOA第0引脚为高电平 
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
}
  • LL库
    • 高性能应用:适合需要高性能和精细控制的应用,如实时控制系统。
    • 经验丰富的开发者:适合熟悉硬件细节和需要优化性能的开发者。

例程:

#include <stm32f1xx_ll_gpio.h>
#include <stm32f1xx_ll_bus.h>
 
void GPIO_Init(void)
{
    // 使能GPIOA时钟  属于stm32f1xx_ll_bus.h 库中函数
    LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); 
 
    // 配置GPIOA第0引脚为输出模式  属于stm32f1xx_ll_gpio.h 中
    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_0, LL_GPIO_MODE_OUTPUT);
    LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_0, LL_GPIO_SPEED_FREQ_LOW);
    LL_GPIO_SetPinOutputType(GPIOA, LL_GPIO_PIN_0, LL_GPIO_OUTPUT_PUSHPULL);
    LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_0, LL_GPIO_PULL_NO);
 
    // 设置GPIOA第0引脚为高电平 
    LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0);
}

 这里我们随便选一个库使用 驱动pc13 引脚 

  • GPIOA:PA0 到 PA15
  • GPIOB:PB0 到 PB15
  • GPIOC:PC0 到 PC15
  • GPIOD:PD0 到 PD15
#include <stm32f1xx_ll_gpio.h>
#include <stm32f1xx_ll_bus.h>
#include <stm32f1xx_ll_rcc.h>
#include <stm32f1xx_ll_system.h>
void GPIO_Init(void)
{
    // 使能GPIOC时钟 

    LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
 
   
    // 配置GPIOC第13引脚为输出模式
    LL_GPIO_SetPinMode(GPIOC, LL_GPIO_PIN_13, LL_GPIO_MODE_OUTPUT);  // 设置引脚模式为输出
    LL_GPIO_SetPinSpeed(GPIOC, LL_GPIO_PIN_13, LL_GPIO_SPEED_FREQ_LOW);  // 设置引脚最大输出速度为低速
    LL_GPIO_SetPinOutputType(GPIOC, LL_GPIO_PIN_13, LL_GPIO_OUTPUT_PUSHPULL);  // 设置引脚输出类型为推挽输出
    LL_GPIO_SetPinPull(GPIOC, LL_GPIO_PIN_13, LL_GPIO_PULL_DOWN);  // 设置引脚上拉/下拉电阻为下拉

   
    LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_13);// 设置引脚电平为低电平
//对于我使用的设备 这条控制显然是多余的,因为其已经内部下拉了,默认电平为低电平
}
int main(void)
{
GPIO_Init();
while(1)
{
// 防止程序意外终止
}

}

 设备电路图中可以得到

输出电平是由 LL_GPIO_SetOutputPin 和 LL_GPIO_ResetOutputPin 函数控制的。

我们上述代码已经拉低了PC13 IO 所以 运行效果为

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/914020.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序使用阿里巴巴矢量图标库正确姿势

1、打开官网&#xff1a;https://www.iconfont.cn/&#xff0c;把整理好的图标下载解压。 2、由于微信小程序不支持直接在wxss中引入.ttf/.woff/.woff2&#xff08;在开发工具生效&#xff0c;手机不生效&#xff09;。我们需要对下载的文件进一步处理。 eot&#xff1a;IE系列…

kafka面试题解答(四)

5、消费者组和分区数之间的关系是怎样的&#xff1f; 消费者组数小于等于分区数&#xff0c;消费者组内每个消费者负责消费不同分区的数据&#xff0c;一个分区只能由一个组内消费者消费。 6、kafka如何知道哪个消费者消费哪个分区&#xff1f; 生产者把数据发送给各个分区&…

Android Profiler 内存分析

Android studio&#xff08;下面简称AS&#xff09;为App提供的性能分析工具&#xff0c;在AS3.0替换掉旧的分析工具&#xff0c;对于其使用方法&#xff0c;官方也有对应的介绍&#xff1a;Android Profiler 对于使用方法&#xff0c;我只用到比较简单的功能&#xff0c;高级的…

DXF-模型空间和图纸空间、图层冷冻标志位

‌DXF文件中操作环境的标志码是组代码67 CAD-模型空间和图纸空间-是CAD中两种不同的操作环境 模型空间主要用于建模&#xff0c;是一个没有界限的三维空间&#xff0c;用户在这个空间中以任意尺寸绘制图形&#xff0c;通常按照1&#xff1a;1的比例&#xff0c;以实际尺寸绘制…

前端开发调试之 PC 端调试

以下内容来自稀土掘金青训营课程 bug 与 debug 点击.cls开启动态修改元素的class输入字符串可以动态的给元素添加类名勾选/取消类名可以动态的查看类名生效效果点击具体的样式值&#xff08;字号、颜色、宽度高度等&#xff09;可以进行编辑&#xff0c;浏览器内容区域实时预览…

Spring Boot集成SQL Server快速入门Demo

1.什么是SQL Server&#xff1f; SQL Server是由Microsoft开发和推广的以客户/服务器&#xff08;c/s&#xff09;模式访问、使用Transact-SQL语言的关系数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的&…

Self-RAG讲解

Self-RAG Self-RAG 概述 Self-RAG&#xff08;Self-Reflective Retrieval-Augmented Generation&#xff09;是一种增强型的RAG&#xff08;检索增强生成&#xff09;策略&#xff0c;结合了自我反思和自我评分机制&#xff0c;以提高检索文档和生成内容的质量。通过对检索到…

设计一致性的关键:掌握 Axure 母版使用技巧

设计一致性的关键&#xff1a;掌握 Axure 母版使用技巧 前言 在快节奏的产品开发周期中&#xff0c;设计师们一直在寻找能够提升工作效率和保持设计一致性的方法。 Axure RP&#xff0c;作为一款强大的原型设计工具&#xff0c;其母版功能为设计师们提供了一个强大的解决方案…

uniapp框架配置项pages.json

uniapp框架配置项pages.json pages.json 文件用来对 uni-app 进行全局配置&#xff0c;决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。 globalStyle 全局配置 用于设置应用的状态栏、导航条、标题、窗口背景色等。下面配置项默认应用于每个页面。 注意…

蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)

重发一下&#xff0c;之前得排版有问题&#xff0c;而且另外加了一道题。。 别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 枚举与模拟 一、卡片&#xff1a; 【问题描述】 小蓝有很多数字…

Java 基于 SpringBoot+Vue 的社区智慧养老系统(V3.0)

大家好&#xff0c;我是Java徐师兄&#xff0c;今天为大家带来的是Java 基于 SpringBootVue 的社区智慧养老系统&#xff08;V3.0&#xff09;。该系统采用 Java 语言开发&#xff0c;SpringBoot 框架&#xff0c;MySql 作为数据库&#xff0c;系统功能完善 &#xff0c;实用性…

el-table 纵向垂直表头处理

项目中表格展示会遇到需要纵向垂直表头情况&#xff0c;下面&#xff0c;我们基于el-table组件来实现这种表格。 以下是这次需要用到的数据表格&#xff0c;已知左侧违章名称是固定的&#xff0c;而月份是不固定的&#xff0c;在后端返回数据格式已确定的情况下&#xff0c;需…

caozha-CEPCS(新冠肺炎疫情防控系统)

caozha-CEPCS&#xff0c;是一个基于PHP开发的新冠肺炎疫情防控系统&#xff0c;CEPCS&#xff08;全称&#xff1a;COVID-19 Epidemic Prevention and Control System&#xff09;&#xff0c;可以应用于单位、企业、学校、工业园区、村落等等。小小系统&#xff0c;希望能为大…

新手如何快速搭建一个Springboot项目

新手如何快速搭建一个Springboot项目 一、开发环境准备后端其他工具 二、创建后端项目三、定义HelloController.hello()方法&#xff0c;返回“Hello Springboot” 一、开发环境准备 后端 1.安装 JDK&#xff1a;确保你的系统中安装了合适版本的 JDK&#xff0c;Spring Boot …

uniapp—android原生插件开发(4uniapp引用aar插件)

本篇文章从实战角度出发&#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲&#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程&#xff0c;轻松应对安卓原生插件开发与打包需求&#xff01; 一、将android程序打包成aar插件包 直接使…

vs2022搭建opencv开发环境

1 下载OpenCV库 https://opencv.org/ 下载对应版本然后进行安装 将bin目录添加到系统环境变量opencv\build\x64\vc16\bin 复制该路径 打开高级设置添加环境变量 vs2022新建一个空项目 修改属性添加头文件路径和库路径 修改链接器&#xff0c;将OpenCV中lib库里的o…

[Java]微服务拆分

导入项目 本篇及后续的微服务学习都是基于Centos7系统下的Docker部署&#xff0c;因此需要准备: Centos7的环境SSH客户端安装好Docker会使用Docker 之前的学习, 导致虚拟机中存在黑马商城项目以及mysql数据库, 为了保持一致, 需要删除 cd /rootdocker compose down 安装mysq…

【C++】内存池

目录 一、什么是内存池 1.池化技术 2.内存池 3.内存池主要解决的问题 二、内存池的实现 1.New申请空间 2.Delete释放空间 3.再看New申请空间 4.内存池完整代码 三、内存池性能测试 一、什么是内存池 1.池化技术 所谓 "池化技术"&#xff0c;就是程序向系统…

计算机新手练级攻略——如何搜索问题

目录 计算机学生新手练级攻略——如何搜索问题1.明确搜索意图2.使用精确关键词3.使用专业引擎搜索4.利用好技术社区1. Stack Overflow2. GitHub3. IEEE Xplore4. DBLP 5.使用代码搜索工具1. GitHub 代码搜索2. Stack Overflow 代码搜索3. Papers with Code4. IEEE Xplore 6.查阅…

区块链技术在电子政务中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 引言 区块链技术概述 定义与原理 发…