虽然寄存器开发执行效率很高,但代码的移植性只能说一般,标准库导入文件,相对来说也比较麻烦,那么CubeMX和HAL库的出现,让广大开发者们多了一份选择。
STM32CubeMX给了想上手开发STM32的同学一个非常便利的条件,希望越来越多的开发者们能轻松上手这款工具,我也在不断努力学习HAL库开发STM32,供广大爱好者们参考学习。
同时这也是我发的第一篇博客,会有许多问题,希望大家能及时指出,我会感激不尽的,希望通过这个博客,能对大家在STM32的学习有所帮助。
我用的板子是正点原子探索者开发板,MCU型号为STM32F407ZGT6。
我喜欢稚辉君所称的优雅的开发方式,我选用JetBrians系的CLion作为我的IDE
具体配置方法参见稚辉君b站专栏配置CLion用于STM32开发【优雅の嵌入式开发】 - 哔哩哔哩 (bilibili.com)
STM32CubeMX版本6.5.0是最新版本
目录
一、要求
我们先看一下这个摩尔斯译码器的要求:
我们可以分析一波摩尔斯译码器功能大致是这样的:
我们首先要明确,摩尔斯译码器的原理就是将符号转换成点和划的排列组合或将点和划的组合转换成字符。
那么,摩尔斯译码器可以分为输入功能和输出功能。
输出功能:长短按的按键结合,构成划和点的组合,再将这些组合,翻译成最终的字符并输出。
输入功能:输入字符,翻译成点和划,再将这些组合,反映在灯亮的时间长短上。
我们可以直接分析所需要用到的外设:
反映亮度的LED:定时器PWM功能;
闪烁的LED:通用输入输出端口GPIO;
按键:外部中断EXTI;
发送和接受字符:通用异步收发器UART,并开启DMA。
需要的外设就这么多,我们一个一个功能开始讲。
二、基本配置
首先我们在cubemx里配置一些基本的设置
1.配置时钟
开启外部高速时钟HSE,晶振设置为8MHz,主频168MHz。
选择HSE,PLLCLK通道。
2.按键的设置:
PE2对应KEY2,开启外部中断EXTI2,下降沿触发,默认上拉。
3. 闪烁的LED设置:
GPIO输出模式(GPIO_Output),推挽输出(Output Push Pull),高速输出模式(Fast Mode)
4.改变亮度的LED的设置:
时钟源选择内部时钟,
PF9对应TIM14,CHANNEL_1通道,开启PWM模式,
预分频系数设置为83,则频率=84MHz/(83+1)=1MHz,
重装载值设置为999,周期=1us×1000=1ms,
5.计算按键无操作的时间的配置:
选择TIM2作为计算时间的定时器,并开启内部时钟,
预分频系数设置为8400-1,则频率=84MHz/8400=10000Hz,
重装载值设为10000-1,则周期=0.1ms×10000=1s
6.串口的配置:
打开USART1串口,开启异步收发模式,波特率为115200,1停止位,无奇偶校验并打开DMA,将USART1_RX设置为循环接收模式。