历史上的今天
返回首页

历史上的今天

今天是:2025年04月11日(星期五)

正在发生

2019年04月11日 | STM32Cube-按键控制LED

2019-04-11 来源:eefocus

STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列。平台包括了STM32Cube 硬件抽象层(一个STM32抽象层嵌入式软件,确保在STM32系列最大化的便携性)和一套的中间件组件(RTOS, USB, FatFs, TCP/IP,  Graphics, 等等).


直观的STM32微控制器的选择和时钟树配置


微控制器图形化配置外围设备和中间件的功能模式和初始化参数


C代码生成项目覆盖STM32微控制器的初始化符合IAR™,Keil的™和GCC编译器。


对于新的产品设计,我们强烈推荐使用STM32Cube来加速你的开发过程,并为以后的产品平台移植打下良好的基础。


关于HAL库API的使用方法可以到ST官网下载:https://www.stmcu.com.cn/Index/search?search_keywords=UM1725

1.新建工程

打开STM32cubeMX软件,点击New Project。选择对应开板MCU(STM32F103ZET6)。

 


选择工程后进入工程界面,如下图所示。



2.  配置外设。


 


RCC设置,选择HSE(外部高速时钟)为Crystal/Ceramic Resonator(晶振/陶瓷谐振器)

GPIO口功能选择,PB5、PE5为LED2、LED3.找到对应管脚设置为GPIO_Output模式。(黄色引脚为该功能的GPIO已被用作其他功能,可以忽略。绿色表示管脚已使用)

PA0、PE2、PE3、PE4为按键输入管脚,选择GPIO_OUTPUT模式。


 


3. 时钟配置

       时钟配置采用图形配置,直观简单。各个外设时钟一目了然。STM32最高时钟为72M,此处只有在HCLK处输入72,软件即可自动配置。(RCC选择外部高速时钟)。

有关配置讲解:http://blog.sina.com.cn/s/blog_554240170102vu80.html



4.功能外设配置


 


在配置框我们可以看到有几个区域,分别对应的功能设置如下

• Multimedia(多媒体):音频视频、LCD

• Control(控制):定时器

• Analog(模拟):DAC、ADC

• Connectivity(通讯连接):串口、SPI 、I2C、USB、ETH

• SYStem(系统):DMA(直接存储器存取)、GPIO、NVIC、RCC、看门狗

• middlewares(中间件): FreeRTOS、FATFS、LwIP、USB

此工程中DMA没用的不用配置,NVIC(嵌套中断向量控制器(Nested Vectored Interrupt Controller))配置中断优先级。RCC不用配置。



• GPIO Pin Level (管脚状态):高电平

• GPIO mode (管脚模式 ):推挽输出

• Maximum output speed (最大输出速度):高速

• User Label (用户标签):LED2(自定义)

更改用户标签,管脚配置图会显示管脚的标签。


 


4.  功耗计算

这个根据配置的外设计算功耗,不用理会。


 


5. 生成工程报告

点击Project –>Generate Reports或者点击快捷图标生成报告。系统会提示先创建一个工程项目。点击Yes设置工程。


 


输入工程名,选择工程路径(注意不要出现中文,否则可能出错)。工具链/IDE选择MDK-ARM V5。最后面可以设置堆栈大小,此处默认不作修改。


 


在Code Generator中找到Generated files框,勾选Generated periphera initialization as a pair of '.c/.h' files per IP。外设初始化为独立的C文件和头文件。


 


点击生成报告,工程目录下会生成txt文件和pdf文件,里面记录了我们刚才的设置。

6.   生成工程代码

点击Project –>Generate Code或者点击快捷图标生成工程代码。


 


点击Open Project打开工程。到此就配置好工程外设初始化。

 


7.   添加应用程序

在gpio.c文件中可以看到LED和KEY管脚的初始化函数。

 


在stm32f1xx_hal_gpio.h头文件中可以看到GPIO的操作函数。


 


①     在main函数中的while循环中添加LED流水灯效果的应用程序,按键待会


 


了解固件库函数命名方法编写就很容易了,

一般是:HAL_[外设名]_[功能名]

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);    

这个就是写管脚函数,就是设置管脚是0还是1;

HAL_Delay(1000);

    这是固件库里面的一个延时,用到的是滴答时钟;

至于程序下载就不说了。


②    按键讲解

在gpio.c文件中最后面的USER CODE BEGIN 2和USER CODE END 2中间添加如下四个函数。

(用户代码要加在USER CODE BEGIN N和USER CODE END N之间,否则下次重新生成代码后,会被删除)


 


上面添加了四个函数;


 


在main.c文件中的main函数的while循环中添加应用代码。代码中使用switch case语句。


 


再次编译程序;

总结:STM32Cube提供了固件库,用户可直接调用固件库函数来开发,并且可以很好的实现STM32-MCU全系列的代码一致性。同时STM32CubeMX工具提供的可视化引脚、外设、时钟等配置功能,可以帮助快速完成工程的建立、初始化。大大降低了开发者的工作量。

推荐阅读

史海拾趣

ECLIPSE公司的发展小趣事

随着Eclipse项目的不断发展,越来越多的知名公司加入到这一开源社区中,如Oracle、Red Hat等。这些公司不仅为Eclipse贡献了代码,还提供了资金支持。Eclipse的功能日益完善,逐渐成为了Java开发领域的佼佼者。同时,Eclipse也支持其他编程语言,如C/C++、Python等,进一步扩大了其用户群体。

BSI公司的发展小趣事

在全球化的背景下,电子行业的国际合作日益加强。BSI作为国际标准化组织的重要成员,积极推动了电子行业的国际合作和交流。通过组织国际会议、研讨会等活动,BSI为各国政府、行业协会和企业提供了一个交流和合作的平台。这些活动不仅促进了电子行业的国际合作和交流,还推动了电子行业的全球化发展。

虽然以上并非具体的发展故事,但通过这些描述,可以看出BSI在电子行业发展中扮演了重要角色,通过标准制定、产品测试与认证、推动绿色发展、支持技术创新以及促进国际合作等方式,为电子行业的健康发展做出了积极贡献。如需更多关于BSI公司具体发展故事的信息,建议查阅公司官方发布的资料或相关新闻报道。

E-T-A [E-T-A Circuit Breakers]公司的发展小趣事

E-T-A公司自创立以来,一直由Ellenberger和Poensgen家族掌控。家族成员代代相传,将公司的传统和价值观延续至今。同时,公司也注重培养新一代的管理和技术人才,为公司的持续发展注入新的活力。在家族传承的基础上,E-T-A公司不断追求创新,致力于为客户提供更加优质的产品和服务。

Fagor Electrónica公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Fagor Electrónica开始将其业务范围扩展到更广泛的电子和数字领域。公司不断推出新的产品和服务,以满足不同客户的需求。同时,Fagor Electrónica还积极拓展国际市场,将其产品销往世界各地。这一时期的多元化发展和市场拓展为公司带来了更大的商业机会和更广阔的市场前景。

上海晶丰明源(BPS)公司的发展小趣事

近年来,电子行业面临着诸多挑战,如市场竞争加剧、技术更新换代迅速等。然而,晶丰明源凭借强大的研发实力和敏锐的市场洞察力,成功应对了这些挑战。公司不仅加大了研发投入,加强了与高校、科研机构的合作,还积极引进和培养人才,为公司的发展注入了新的活力。同时,公司还注重产品创新和品牌建设,不断提升产品的附加值和竞争力。

CAMBION公司的发展小趣事

在技术创新的基础上,CAMBION公司积极拓展市场。公司通过与各大电子设备制造商建立合作关系,将其产品广泛应用于智能手机、平板电脑、笔记本电脑等领域。同时,CAMBION还注重品牌建设,通过参加国际电子展、发布技术白皮书等方式提升品牌知名度和影响力。这些努力使得CAMBION的产品在市场上获得了良好的口碑和认可。

问答坊 | AI 解惑

MSP430的TI官方C例程

MSP430x13x,14x,15x,16x TI官方C源程序例程 给要用到的人共享吧!!!…

查看全部问答>

各种功放电路集锦

本帖最后由 paulhyde 于 2014-9-15 03:27 编辑 包括30W-100W功放电路和电子二分频功放电路设计及说明~~~~~  …

查看全部问答>

谁有关于投影机软件开发的资料?DDP2230之类

哪位大哥有关于投影机软件开发的资料?TI有个DDP2230的芯片,有谁了解?…

查看全部问答>

关于ARM的IIC串行通信的几个问题!请高手解答 急~~~

程序的主要目的是将0~0xff这256个数按顺序写入到EEPROM(AT24C16)的内部存储单元中,然后再依次将他们读出,并通过实验室板的串口UART0输出到PC机上运行的超级终端上。 程序如下: #include #include \"2410addr.h\" #include \"2410lib.h\" ...…

查看全部问答>

格式化NandFlash

通过FormatVolumeEx,以FAT32格式化NandFlash后,从SD卡复制文件到格式化的分区中。但是最后对注册表的写操作,在关机重启之前,都存在。一旦关机重启,注册表写操作的数据全部丢失,不知为什么?…

查看全部问答>

谁能帮忙从 pudn 上下载几个程序发到我的邮箱里,谢谢

一个内存驱动器的源代码 http://www.pudn.com/downloads/sourcecode/windows/vxd/detail1558.html 虚拟串口用VC编译 http://www.pudn.com/downloads170/sourcecode/windows/vxd/detail788464.html 8139网卡驱动源码 http://www.pudn.co ...…

查看全部问答>

大家进来讨论下TTL,CMOS,NMOS电路的区别以及应用

大家进来讨论下TTL,CMOS,NMOS电路的区别以及应用…

查看全部问答>

单片机C程序中如何传递32位的参数

单片机C程序的变量都是8位的,现在想传递一个32位或24位的变量参数,怎么传啊? 用指针?还是结构? 麻烦写个简单的程序,如A函数调用B函数传参数。…

查看全部问答>

请教:对ti串口转网口套件重新下载bootloader后产生的问题

对ti串口转网口套件重新下载自己改的bootloader后,再也连不上该套件,也无法重新下载了,哪位知道如何解决呀,谢谢:(…

查看全部问答>