STM32CubeMX安装及使用教程(二)

本文详细介绍了如何使用STM32CubeMX软件进行芯片选择、SYS/RCC/GPIO参数配置,时钟设置,以及工程项目的初始化。从新项目创建到编译问题解决,适合STM32初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

第一章我们讲述了如何安装和配置STM32CubeMX软件,这一章我们来说说如何简单的使用STM32CubeMX软件。


软件使用

1.打开STM32CubeMX软件,点击File->New Project

2.选择芯片型号

我这里选择的是STM32F446RETR芯片,点击具体芯片,点击Start Project,然后工具会自动打开配置工程

3.配置SYS参数

点击Pinout&Confuguration,点击SYS,选择需要Ddbug的接口,主要包括串口/JTAG/SWD三种接口,我们这里使用的是Jlink的SWD接口,选个好之后芯片上会自动显示相应的引脚名称。

 4.配置RCC参数

 点击Pinout&Confuguration,点击RCC,我们使用的是外部25M晶振,这里选择Crystal/Ceramic Resonator,选个好之后芯片上会自动显示相应的引脚名称。

 5.配置GPIO参数

点击Pinout&Confuguration,点击GPIO,在Pinout view中选择对应的引脚,设置为GPIO_Output。

 修改GPIO参数,

GPIO putput level:gpio输出数据

GPIO mode:gpio模式设置(推挽输出/开漏输出)

GPIO Pull-up/Pull-down:gpio上下拉设置

Maxinum output speed:gpio输出速度设置

User Label:用户名称设置

6.时钟设置

我们使用的是外部25M晶振,先选择HSE(外部晶振),设置为25M,在设置系统时钟168M。

 7.工程设置

 先设置工程名称(Project Name),工程路径(Project Location),选择IDE(主流单片机IDE包括Keil和IAR),我们这里使用IAR编译器,再分配以下堆栈空间大小(按需分配)。

 在设置代码,勾选Generate peripheral initialization as a pair of '.c/.h' files per peripheral,主要是将GPIO/UART等外设分别打包一个.c/.h文件。

 8.点击 GENERATE CODE,生成工程代码

 9.我们选个打开工程,看看工程中主要框架

 10.工程分为三部分,主要包括启动文件/应用文件/内核+HAL文件

 11.编译工程

点击下图图标编译工程,在状态栏有100个error,肯定是系统文件出问题了

编译出错大致意思是未定义src/len等参数,

查阅相关资料,将下图中“__restrict”改成“restrict”

 再次编译可以看到状态栏显示 0 error 0 warning。

 12.如果将工程导成Keil工程就不会出现以上的问题。

### STM32CubeMX 中配置和使用 DMA 教程 #### 配置 USART 和 DMA 的基础设置 在STM32CubeMX中,为了使能并配置DMA用于USART通信,需先打开项目中的对应外设。选择目标MCU上的USART端口,在其模式选项里勾选接收和发送功能,并激活DMA支持[^4]。 ```python // 通过STM32CubeMX GUI界面操作实现上述配置 ``` #### 设置 DMA 参数 进入DMA模块的参数设定页面,调整传输方向、缓存大小以及其他必要的属性以适应应用需求。对于串行通讯而言,通常会指定从内存到外设的方向来进行数据发送;相反地,则是从外设读取至内存完成接收动作[^1]。 #### 启用中断和服务例程 为了让程序能够响应DMA事件(如传输完毕),应该开启相应的中断源并在服务例程文件内编写回调函数来处理这些状态变化。这一步骤确保了即使当CPU处于低功耗模式下也能及时得知DMA活动的结果[^2]。 #### 编写应用程序逻辑 最后,在主循环或其他适当位置调用HAL库提供的API接口启动DMA传输过程。下面给出了一段简化版的例子展示如何利用DMA机制向另一个设备连续不断地传送字符串消息: ```c #include "main.h" UART_HandleTypeDef huart1; uint8_t txData[] = "Hello, World!\r\n"; int main(void){ /* 初始化所有已配置的硬件资源 */ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); /* 开始DMA发送 */ HAL_UART_Transmit_DMA(&huart1, (uint8_t*)txData, sizeof(txData)); while (1){} } void UART_TxCpltCallback(UART_HandleTypeDef *huart){ if(huart->Instance==USART1){ // 当前传输已完成,可在此处准备下一组要发送的数据 } } ``` 此代码片段展示了怎样借助于STM32CubeMX生成的基础框架快速搭建起基于DMA技术的高效数据交换通道[^5]。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值