Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构

发布者:深沉思考最新更新时间:2022-08-15 来源: csdn关键字:Keil  MDK  STM32系列  STM32CubeMX  基础结构 手机看文章 扫描二维码
随时随地手机看文章

概述

从前面介绍的STM32开发可以感受到, 虽然SPL对于纯寄存器方式开发已经是很大的进步, SPL将大部分寄存器配置做了很好的封装, 配置项简单易读, 但是外设与输出脚的映射关系, 配置项的数量, 配置之间的关联都使得配置难度并未降低, 在项目启动阶段依然要通过不断查阅MCU的用户手册去修改方案, 各种情况下的代码例程直接借鉴容易出错, 需要反复尝试, 往往在调通外设这一步就已经耗费了开发人员的大量时间.


所以ST将开发库的重心迁移到了HAL上, 配合HAL的就是STM32CubeMX这个图形化配置工具. 通过图形化界面, 通过预设的逻辑辅助生成代码模板. 这样可以将底层寄存器和外设的复杂定义和逻辑包装在工具界面之下, 避免开发人员进行重复的学习和试错, 节约开发人员的时间精力. 这也是市场上其他主流MCU的技术配套发展方向.


下面介绍STM32CubeMX的安装和使用


下载安装STM32CubeMX

官网地址 https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html


安装后, Alt+U 打开Embedded Software Package Manager, 在里面找到STM32F4, 勾选最高的那个版本, 当前是1.26.2, 点击下面的Install Now. 这个需要比较长时间.


对于1.26.2这个版本, 不要去尝试From Local, 因为这个版本的zip文件有两个, 一个1.26.0, 一个1.26.2的patch, 这两个包都下载到本地后, 尝试了无数次, From Local都会报错. 最后还是点Install Now, 让它从网络下载安装的.


配置项目

使用STM32CubeMX快速创建项目代码, 主要就是以下几步:


MCU选择

System Core -> SYS 配置A13, A14 (必须)

System Core -> RCC 配置时钟源 (必须)

Clock Configuration -> 配置系统时钟 (必须)

配置各种外设

1. 选择MCU型号

点击主界面的ACCESS TO MCU SELECTOR, 会打开型号选择, 在左边勾选Arm Cortex-M4, 在右边选对应的型号, 然后点右上角的Start Project


2. PIN脚设置

上一步点击后, 就会进入Pinout & Configuration界面, 在左侧的列表中, 默认有改动的是System Core下的NVIC, 默认勾选的是旁边的SYS.


System Core -> SYS, Debug 选择 Serial Wire, 这时候会看到图上的PA13和PA14被高亮, GPIO也会产生相应的配置. 这一步比较重要, 如果不配置, 编译好的固件写入MCU后, 再启动就连不上STLink了.

System Core -> RCC, HSE和LSE, 都选择Crystal/Ceramic Resonator, 启用外部的高速和低速振荡源, 这时候GPIO中, PC14, PC15, PH0, PH1 会自动产生对应的配置

Timers -> RTC 如果要启用外部时钟源, 勾选 Activate Clock Source, 这样在下一步的时钟配置中就可以选择内部或者外部时钟源

Connectivity -> USART1, Mode 选择 Asynchronous, 其他默认, 在 System Core -> GPIO 下可以看到又增加了对应USART1的配置, PA9和PA10. 如果要选择PB6和PB7, 需要在右侧的Pinout图上取消PA9和PA10后, 在PB6, PB7上设置, 再到左侧菜单中选择

看项目需要, 可以继续选择SPI, ADC等

3. 时钟设置

点击上方的导航进入 Clock Configuration界面. 这里很直观地展示了HSE, LSE, HSI, LSI 这些时钟源与系统和外设的关联.


如果使用默认的HSI, 时钟就是16MHz

如果使用外部的HSE, 时钟就是25MHz(看具体的板子), 可以直接连到SYSCLK, 也可以通过PLL, 在HCLK处填入84MHz后回车, 软件会自动计算出前面部分正确的分频和倍频数字. SYSCLK的频率需要配置到MDK项目配置中的Xtal

4. 配置项目名称和路径

Toolchain/IDE 要选择 MDK-ARM, 版本选V5


5. 生成项目代码

点击右上角的GENERATE CODE就会生成代码, 代码可以直接用Keil MDK打开


外设配置步骤

配置定时器

通过TIMx配置


勾选 Internal Clock

配置下方参数

Counter Settings

Prescaler: 0

Counter Mode: Up

Counter Period: 1999 这里和Perscaler组合, 实现(0+1)(1999+1)个时钟的周期

Internal Clock Division (CKD): No division

auto-reload preload: Disable

Trigger Output (TRGO) Parameters

Master/Slave Mode (MSM bit): Disable

Trigger Envent Selection: Reset

NVIC Settings

TIM3 global interrupt: Enable

对应代码变化

stm32f4xx_hal_conf.h 启用TIM模块


#define HAL_TIM_MODULE_ENABLED

main.c


static void MX_TIM3_Init(void)

{

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};

  TIM_MasterConfigTypeDef sMasterConfig = {0};

  htim3.Instance = TIM3;

  htim3.Init.Prescaler = 0;

  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim3.Init.Period = 1999;

  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)

  {

    Error_Handler();

  }

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

  if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)

  {

    Error_Handler();

  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)

  {

    Error_Handler();

  }

}

stm32f4xx_hal_msp.c 这里会一起处理其他的TIM实例


void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)

{

  if(htim_base->Instance==TIM2)

  {

    // ...

  }

  else if(htim_base->Instance==TIM3)

  {

    __HAL_RCC_TIM3_CLK_ENABLE();

    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);

    HAL_NVIC_EnableIRQ(TIM3_IRQn);

  }


}


void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)

{

  if(htim_base->Instance==TIM2)

  {

    //...

  }

  else if(htim_base->Instance==TIM3)

  {

    __HAL_RCC_TIM3_CLK_DISABLE();

    HAL_NVIC_DisableIRQ(TIM3_IRQn);

  }


}

stm32f4xx_it.h 增加对应的定时中断处理


void TIM3_IRQHandler(void);

stm32f4xx_it.c


/**

  * @brief This function handles TIM3 global interrupt.

  */

void TIM3_IRQHandler(void)

{

  HAL_TIM_IRQHandler(&htim3);

}


参考

https://blog.csdn.net/weixin_42157650/article/details/88913871

仅用2个字节做buffer的ADC https://controllerstech.blogspot.com/2017/08/adc-using-dma.html

禁用DMA中断 https://shequ.stmicroelectronics.cn/forum.php?mod=viewthread&tid=615792


关键字:Keil  MDK  STM32系列  STM32CubeMX  基础结构 引用地址:Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构

上一篇:Keil MDK STM32系列(四) 基于抽象外设库HAL的STM32F401开发
下一篇:STM32F401+nRF24L01无线传输音频(对讲机原型)

推荐阅读最新更新时间:2024-11-18 01:49

STM32 MCU通过STM32CubeMx配置NVIC怎么没有中断子优先级选项
1、使用CubeMx配置NVIC时为何不见子优先级选项? 有些STM32用户,尤其是那些用过基于ARM Cortx-M3/M4/M7内核的STM32 MCU的用户,在使用基于M0/M0+内核的STM32系列并通过STM32CubeMx进行NVIC配置时,不难发现一个问题,那就是怎么没有中断子优先级【或称响应优先级、副优先级等】的配置?!【当然,很多时候我们或许没有关注子优先级】如下图所示,只看到抢占优先级的配置,看不到子优先级的配置项。 上图是我基于STM32L0系列芯片的配置,该系列芯片是基于ARM Cortex-M0+内核的。我们再看看下图的NVIC配置页面,显然可以看到抢占优先级【PreemptionPriority】和
[单片机]
<font color='red'>STM32</font> MCU通过<font color='red'>STM32CubeMx</font>配置NVIC怎么没有中断子优先级选项
STM32 基础系列教程 13 – ADC DMA
前言 学习stm32 adc模数转换接口使用,学会用STM32对模拟信号时行采样,通过DMA方式得到ADC结果。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置: 系统时钟树(ADC最大时钟不超过14M) ADC配置(轮询与中断模式不适用于多通道扫描模式,如果要多通道,需要用到DMA),开启连续转换模式!
[单片机]
<font color='red'>STM32</font> <font color='red'>基础</font><font color='red'>系列</font>教程 13 – ADC DMA
STM32 基础系列教程 19 – WWDG
前言 学习stm32 窗口看门狗(WWDG)接口使用,学会用STM32内部窗口看门狗(WWDG)接口实现程序异常时自复位功能。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。窗口看门狗由从APB1时钟分频后得到的时钟驱动(PCLK1除以4096 = 36M/4096 = 8.789K),通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。 窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在
[单片机]
<font color='red'>STM32</font> <font color='red'>基础</font><font color='red'>系列</font>教程 19 – WWDG
STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题
1、DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com)。 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数 字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性。传感器包括一 个电容式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。 DHT21(AM2301)湿敏电容数字温湿度模块是一款含有己校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个
[单片机]
<font color='red'>STM32</font>读取温湿度传感器DHT11和DHT21(AM2301)<font color='red'>系列</font>问题
工业机器人的机械部分主要包括什么
工业机器人的机械部分是其核心组成部分,主要包括以下几个方面: 机器人本体 机器人本体是工业机器人的基础结构,包括机器人的支架、臂部、手腕和末端执行器等。机器人本体的设计和制造质量直接影响到机器人的性能和稳定性。 1.1 支架 支架是工业机器人的基础,通常由金属材料制成,如钢、铝合金等。支架的设计需要考虑到机器人的负载能力、运动范围和稳定性等因素。 1.2 臂部 臂部是工业机器人的主要运动部件,通常由多个关节和连杆组成。根据机器人的类型和应用场景,臂部的设计可以有所不同。常见的臂部类型有直角坐标臂、球形臂、SCARA臂和关节臂等。 1.3 手腕 手腕是连接臂部和末端执行器的部分,可以进行旋转和摆动等动作。手腕的设计需要考虑到
[嵌入式]
keil c51编译器的一些使用心得
现在的存储器已经不像七八年前那样昂贵了,但是ram相对于rom和eeprom的价格还是不可同样看待的,所以程序中节省内存在现在看来还是非常关键的。原因有以下几点: 1.ram的存取速度相对于eeprom的存取速度要快很多倍,不在一个数量级上,主要是因为eeprom的存储要想写入就必须先擦除,而且eeprom的擦出需要成块擦除(这是由于eeprom的擦除原理是场效应管的栅极上电擦除的,为了节省成本厂家一般都是8Bytes/page 64Bytes/page),所以使用ram来处理中间的数据是能够符合速度要求的。 2.无论是xram还是eeprom都是外部存储器,在负值时都要用到16bit地址空间(8位机),这样无形中就增大了程序的c
[单片机]
STM32CubeMX在SRAM中调试的设置
首先要开启SW或JTAG调试模式,默认是关闭的。 SRAM调试不由Flash下载,而是通过“DEBUG”来下载和运行的。 项目CODE/RAM,依据芯片参数不同来设置。例子是C8T6/20Kram(16Kcode,4Kram)来配置的 将以下代码加入项目,同时定义VECT_TAB_SRAM,开启向量表在SRAM定位 #ifdef VECT_TAB_SRAM SCB- VTOR = SRAM_BASE | 0x0;//VECT_TAB_OFFSET; //Vector Table Relocation in Internal SRAM. #else SCB- VTOR = FLASH_BASE | 0x0;//VEC
[单片机]
<font color='red'>STM32CubeMX</font>在SRAM中调试的设置
STM32开发笔记20: STM32L053R8T6的keil配置
单片机型号:STM32L053R8T6 使用STM32CubeMX生成STM32L053R8T6相关的应用程序代码后,使用Keil开发环境第1次下载的时候,提示如下错误,我使用F0和F4的单片机,没有遇到过。 仔细查看工程设置,原因在工程设置中,我们需加入相应的Flash配置信息,如下图所示,具体的选择,要根据单片机的类型,我们可以仔细查看数据手册。 但下载的时候,偶尔还会提示如下错误: 这件事情网上说了很多的解决方法,我自己测试,更改2处Keil的设置既可以解决,如下图所示。 此2处更改后,反复下载程序,亦不再报错。
[单片机]
<font color='red'>STM32</font>开发笔记20: STM32L053R8T6的<font color='red'>keil</font>配置
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved