历史上的今天
返回首页

历史上的今天

今天是:2024年09月18日(星期三)

正在发生

2019年09月18日 | STM32CubeMX系列教程03_创建并生成代码工程

2019-09-18 来源:eefocus

一、写在前面

本文面向初学者,使用STM32CubeMX一步一步配置一个可直接编译下载,并成功运行的代码。


实践操作成功之后有了成就感,大家才会更加有信心继续学习下去。


本文只提供LED闪烁的简单实例讲解,重点是引导初学者入门。


更多实例(如UART、TIM、CAN...)我会单独整理一系列教程,并提供源码分析和下载。


二、准备工作

学习STM32CubeMX进行开发,需要有几样准备工作。


2.1 下载安装STM32CubeMX及HAL库

请参看文章《STM32CubeMX系列教程02_STM32CubeMX工具、HAL库下载、安装说明》


提示:下载安装MCU对应的HAL库就行。 比如:你开发板MCU是STM32F1系列,对应的STM32Cube_FW_F1就行。


2.2 下载安装IDE

推荐使用大众化的MDK-ARM这款集成开发环境(IDE)。当然,还支持EWARM、 TureSTUDIO、 SW4STM32等集成开发环境。


请参看文章:Keil系列教程


2.3 准备硬件

学习STM32CubeMX,建议大家买一块开发板。某宝上面很多,根据自己经济能力,贵一点,便宜一点都行。以及准备一个ST-Link下载器。


推荐阅读:ST-Link资料


三、创建工程

接下来从选择自己型号MCU,到生成代码并成功运行的创建过程。


1.打开STM32CubeMX,进入MCU选择器

进入选择器时会联网更新数据库,可能需要等待一下。


2.选择对应型号MCU

3.时钟源选择


如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC(如下图)。如果使用默认内部时钟(HSI),这一步可以略过。


4.选择GPIO(LED)引脚


我们这里使用一个GPIO引脚(PF8)控制LED亮灭。


5.配置时钟Clock


STM32CubeMX配置时钟的界面非常方便,有很多提示(比如最大时钟),很多地方直接点击选择就行了。


默认高速时钟是使用内部(HSI),而且CPU时钟配置的比较低。以我选择的STM32F103,外部8M晶振为例(如下图)。

6.工程管理


工程管理器的内容比较多,大部分都默认即可,这里讲述几个要点(如下图),更多选项后期详细讲述。

IDE有几种,如果你不用MDK-ARM,也可选择其他IDE。


7.生成代码


以上操作就基本配置完成了一个简单的Demo工程,只需要点击“生成代码”即可。


8.添加代码


当然,以上生成的代码还不够完善,需要添加自己的应用代码。


添加如上图这样一段代码,你开发板上LED就会间隔500ms变化一次(呈现闪烁状态)。


添加应用代码:


HAL_Delay(500);

HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_8);

提示: 1.延时500ms时间需要你时钟配置正确。


2.LED对应引脚需要与你开发实际一致(本文以PF8为例)。


3.生成的MDK-ARM工程,编译下载之后,默认是不会运行代码,需要重新复位一次才能运行,或你自己配置一下(如下图)。

好啦,本文就讲到这里,是不是很简单?请根据自己开发板MCU型号,自己动手实践一下。

推荐阅读

史海拾趣

GISMA Steckverbinder GmbH公司的发展小趣事

随着全球电子市场的不断扩大,GISMA积极实施国际化战略,努力拓展海外市场。公司不仅在欧洲市场建立了稳固的地位,还逐步将业务拓展到亚洲、北美等地区。通过参加国际展会、建立海外销售网络等方式,GISMA成功吸引了众多国际客户的关注,进一步提升了品牌知名度和市场占有率。同时,GISMA还积极寻求与国际知名企业的合作机会,共同推动电子行业的发展。

APSA公司的发展小趣事

随着全球电子市场的不断扩大,APSA公司开始实施全球化战略。公司先后在多个国家设立分支机构,拓展国际业务。通过与全球客户的合作,公司的产品线不断丰富,市场份额也逐渐提升。

Hirose公司的发展小趣事

在竞争激烈的电子行业中,APSA公司始终保持对技术的敏锐洞察和持续创新。公司不断投入研发资金,引进先进的技术和设备,推动产品升级换代。通过不断创新和技术升级,公司成功保持了市场领先地位。

FERYSTER公司的发展小趣事

FERYSTER公司的创始人在一次国际电子展览会上,被一款新型半导体芯片技术深深吸引。他意识到这项技术将引领电子行业的新一轮革命。于是,他果断决定投入大量资金和资源,组建研发团队,对该技术进行深入研究。经过数年的努力,FERYSTER公司成功掌握了这项技术,并推出了基于该技术的全新产品系列。这些产品以其卓越的性能和稳定性,迅速在市场上取得了成功,为公司的快速发展奠定了坚实基础。

HEC Inc公司的发展小趣事

在全球环保意识日益增强的背景下,FERYSTER公司积极响应环保号召,推动企业的绿色转型。公司采用环保材料替代传统材料,优化生产工艺减少能源消耗和废弃物排放。此外,公司还积极推广绿色电子产品,引导消费者关注环保问题。这些努力不仅提升了公司的社会形象,也为公司带来了更多的商业机会。

Ametherm公司的发展小趣事

品质是Ametherm公司的生命线。他们建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重持续改进,通过引入先进的生产设备和技术手段,提高生产效率和产品质量。这些努力使得Ametherm的产品在市场上具有很高的竞争力。

问答坊 | AI 解惑

S3C6410上OpenGL ES的问题

我想在S3C6410的板子上做一个简单的3D的AP,系统是使用的OpenGL ES 2.0,我使用eglInitialize、eglChooseConfig、eglCreateWindowSurface、eglCreateContext、eglMakeCurrent等,一些列的函数初始化都通过了。但是为什么使用glClearColor来设置颜色 ...…

查看全部问答>

CODE和DATA的使用及一些区别

想问下下面两段程序段有啥区别,功能应该是一样的,只是不知道有没有什么区别?还有就是什么情况下用数据段 “AREA |DATA|,DATA,READWRITE”,下面的是代码段CODE   AREA |DATA|,CODE,READONLY   ENTRY   ldr r1 ...…

查看全部问答>

OrCAD--->Model Edit中的Parameters各参数意义

Model Edit中有三个dock,其中一个是Parameters,在这个dock中,Parameter Name有很多参数,但是其代表的什么意思不知道,烦请大家帮助. 如我做了一个MOSFET库,在Parameter Name这一列中,有L、W、KP、RS、RD、VTO、RDS、TOX、CGSO、CGDO、CBD、MJ、PB、 ...…

查看全部问答>

液晶显示的时钟总是反复压栈

在写一个液晶显示的程序,刚接触液晶显示,写了一个简单的时钟程序来看效果。 程序初始运行良好,但加入键盘后,在某一次按下键盘后出现闪屏…… 用仿真器调试,发现反复压栈,压栈的时间很莫名其妙,出栈后的位置在程序的中间位置,按理说不应当 ...…

查看全部问答>

一家手机软件公司的面试题,能不能给小第做一下啊?

7. How many of the below are FALSE about constants? I.   They may occur on the left of :=  ( := 赋值 ) II.  They may occur on the left of =   ( = 比较 ) III. They may occur on the right o ...…

查看全部问答>

关于定时器的问题

      我用定时器启动ad转换,我想问一下在ad中断服务子程序启动后,定时器是继续计数呢,还是等中断服务子程序结束了再开始计数?   初学者,谢谢各位老师!…

查看全部问答>

[求助]Easy ARM2200 使用D12模块 出现命令无法发送问题

我用Easy ARM2200 和 D12 连接做USB测试时候,为啥使用 outportd 函数向D12发送数据的时候,在D12的八位数据线上能够出现正确的值,但当我使用 outportc  函数发送命令的时候,在D12的八位数据线上没有正确的值呢? 而且发现使用 outportc 函 ...…

查看全部问答>

点亮二极管

各位大侠,点亮二极管怎么编写呀,用c语言,avr   mega16单片机,谢谢…

查看全部问答>

CCS

CCS中,用C语言来开发DSP系统时,它的CMD文件一般该怎么写呀?  没有汇编那么清楚明了呀? 请高手讲讲经验。…

查看全部问答>