STM32学习笔记(HAL配CubeMX)(第一天:点灯啥的)

博主从51单片机转到STM32,通过STM32CubeMX快速上手进行点灯实验,记录了学习过程中的挑战和心得,包括GPIO工作模式、HAL库的理解以及CubeMX的使用经验。目前遇到开发板问题,计划通过系列帖子在十天内完成智能小车项目。
摘要由CSDN通过智能技术生成

最近才被迫接手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站上看了一堆杂糅的CubeMX教程总结而来,希望对大家有所帮助。

其中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);

就可以完成跑马灯了。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReedswayYuH.C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值