| |
|
开发:
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例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |