IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32学习笔记(HAL配CubeMX)[1] -> 正文阅读

[嵌入式]STM32学习笔记(HAL配CubeMX)[1]

最近才被迫接手STM32-树莓派做智能小车的一个项目。项目的大致,分为32的部分,树莓派的部分和一些高端算法的部分。

因为题主之前只有过51的开发经历,所以半个月前才开始接手32哈市非常蒙蔽的。所以想写一堆帖子来记录一下问题和自己学习的一个历程。

大概已经过去了半个月,平时都在上研一的课程。但是老板对这个项目催得非常厉害。我有时候在想别人重大之类的都是十个人左右一个队伍,我们学校就我一个。实在是力不从心。但是我对此还是感兴趣的。迫于压力所以还是继续弄吧。

之前一直在看火哥的教程。但是进度太慢了。而且介于标准库的问题,经常出现很多需要自己添加修改头文件的地方。磨磨蹭蹭搞了半个月是一点进度也没有。甚至有点被劝退。因为我想的是快速上手然后开始项目。但是32还是需要积累学习的。因此不停的在GITHUB上找代码以及自主修改这个车子自带的坑爹文件,简直是越补越头痛。所以还是找了个途径,准备直接用cubeMX上手。

因为之前尝试过通过自主添加头文件的形式来进行项目编写,结果解决时间太长,对自己也没有什么增长,所以放弃了那种方式。CubeMX还是比较亲切的。至少在帮你配置环境的时候,不会出现莫名其妙的错误和冲突。

题主用的是STM32F103RC。今天用CubeMX进行了点灯。所以准备写一系列帖子记录下自己接下来十天能否搞定这个项目(即使是CV工程师也不错)

第一天:

同51一样,STM32有大量的寄存器和GPIO端口。只不过51的模式单一,且寄存器数量单一。STM32有7组端口,每组端口最多16个PIN。对于每一个GPIO而言,都可以进行编程,并且每个GPIO有7个寄存器。这就是和51特别不一样的地方。同时,I/O口可以配置8钟模式。这都是特别难的。但是通过CubeMX配置,就可以省下特别多的烦恼。(至少不会天天因为头文件确实,定义缺失而苦恼)

本人的CUBEMX的教程就是在B站上一个叫小蜜蜂老师的UP主那里看的。

其中GPIO的工作模式:

1.(是否复用)推挽输出:(最常用)高低电平输出 ???//常用

2.(是否复用)开漏输出:OC门(三极管理解) ?????

3.上拉(下拉)输入

4.(A/D)模拟输入

5.浮空输入

HAL库的理解(理解源码)

举个例子:

Void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, unint16_t GPIO_Pin,GPIO_PinState PinState );

其中:GPIOx:就是叫你选GPIOA----G;

??????GPIO_Pin:就是叫你选GPIO那个引脚,输入引脚编号;

??????PinState:选高电平SET或者低电平RESET

我觉得这种东西你跟着教程走一遍有的时候记不住。而且你去翻头文件里的声明,有时候有很麻烦。还是需要不停的做项目,以及引用之类的才可以。

CubeMX里的数据结合

USER:用户用的

Drivers:一堆库的外设之类的文件;基本都用结构体来命名了一大堆的功能。

重点1:解读GPIO_InitTyPeDef

首先对于部分GPIO的函数,首先需要通过

GPIO_InitTyPeDef ???GPIO_InitSturuct ={};

来进行引用(自我的一个理解)

然后首先是选择一个使能,一般有4个及其以上的使能函数;

_HAL_RCC_GPIOx_CLK_ENABLE() ??(例如这种时钟使能

然后再配置输入电平

HAL_GPIO_WritePin(--,--,--)

再配置引脚属性,这里就会运用到什么,就是GPIO_InitSturuct这样一个结构体了。

分别配置它的端口、输出模式、上下拉、速度;一般来说,你在CUBEMX里面定义好了,就不要再进行这一步的书写。

HAL_GPIO_Init()

最后就输进去了;

然后做了一个小小的实例,就是跑马灯。这个老师用的L系列的芯片,我自己还是用的野火的F103系列的。但是我觉得差不多嘛。就改改引脚之类的也还好。

同样的道理,选择两个引脚作为低电平输出。一般来说,就是你开发板上LED的地方。

首先看一下,MAIN里面有三个函数:

HAL_Init();??硬件初始化

SystemClock_Config();???时钟

MX_GPIO_Init();???端口初始化

可以通过右键里的GO TO ...去看源码;

这种一般CUBEMX已经帮你写好了

然后再main函数里的while循环里写:

??HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET);

??HAL_Delay(500);

??HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);

??HAL_Delay(500);

就可以完成跑马灯了。

怎么说呢。我感觉我这开发板好像抽风了,很大脑壳,闪两次,就不闪了。所以决定换一个方式去解决一下。下一章更

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:36:15  更:2021-10-13 11:37:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:36:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码