一、基础教程
二、进阶教程
- 比较全的基础教程/配套视频教程(这个视频教程声音有点问题);
- 较好的视频教程;
- STM32CubeMX官方资料;
- STM32CubeF1用户资料(包括对应HAL库资料);
- STM32CubeF4用户资料(包括对应HAL库资料);
三、IDE优化
- 代码自动补全设置;
- 代码主题修改:安装好插件后,在Window->preferences->DevStyle->Color Theme中可以修改代码主题;
四、学习笔记
基本步骤:选择芯片型号,设置RCC时钟,配置时钟树,设置SYS中的Debug模式,配置GPIO
- 目录”Drivers/STM32Fxx_HAL_Driver“中有外设驱动的相关代码,且".c"文件的开头对外设的函数有介绍,看完之后能对驱动文件有大致的了解;
- stm32CubeIDE 在工程中添加.c 和.h文件;
- 调试教程;
- STM32 CubeIDE无法进行调试的问题;
- 批量修改变量名:点击变量->右键->Refactor->Rename,修改好以后点击回车即可;
- STM32CubeIDE查看内存使用情况;
- HAL库概述:链接1、链接2。具体的使用方法可查看进阶教程中对应芯片系列的资料或者查看正点原子F1、F4等系列的HAL库开发指南(正点原子资料下载链接);
- MSP: MCU Specific Package 单片机的具体方案
MSP是指和MCU相关的初始化,引用一下正点原子的解释:
要初始化一个串口,首先要设置和 MCU 无关的东西,例如波特率,奇偶校验,停止位等,这些参数设置和 MCU 没有任何关系,可以使用 STM32F1,也可以是 STM32F2/F3/F4/F7上的串口。而一个串口设备它需要一个 MCU 来承载,例如用 STM32F4 来做承载,PA9 做为发送,PA10 做为接收,MSP 就是要初始化 STM32F4 的 PA9,PA10,配置这两个引脚。所以 HAL驱动方式的初始化流程就是:HAL_USART_Init()—>HAL_USART_MspInit()
,先初始化与 MCU无关的串口协议,再初始化与 MCU 相关的串口引脚,HAL_UART_MspInit
在stm32f1xx_hal_msp.c
文件中有定义。 - 串口通讯有关:
- STM32使用CubeMAX配置的串口中断接收方法;
- 串口数据的收发(中断模式);
- 使用DMA收发数据;
HAL_UART_Transmit_DMA(&huart1, USER_SED_BUF, BufNum);
此行代码用于开启发送数据,在普通模式下只发送一次(发送完成后会失能DMA发送),在循环模式下会一直发送,在此函数内部可以查看DMA有关中断的回调函数;hdma_usart1_tx.State == HAL_DMA_STATE_READY
,此行代码用于判断串口1的DMA发送是否完成,具体定义可在HAL_DMA_StateTypeDef
中查看;
- 时钟树设置:时钟树在设置前要将HSE使能为外部时钟,否则在设置HCLK时钟时不能设置为MAX值。
- 调试时,如果Debug选项配置为NoDebug来进行调试,调试程序会导致Flash锁死,提示
Failed to start GDB serverFailed to start GDB
,在进行调试时,一定要先设置Debug的模式;
- Flash锁死的解决方法;
- FreeRTOS:
- 代码规范:
define
中的变量全部用大写,例,NUM_START
(下划线可选用,但是要保持一致)- 函数和全局变量用"帕斯卡命名法",例:
Device_Init();
、MotorNum
(方法采用下划线分隔,变量不用分隔) - 局部变量用“驼峰命名法”,例:
dataNum
;
- 调试时的条件断点;
- 调试时断点添加过多会有错误;
- 定时器与PWM:文档1、文档2,开启PWM时,
HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_ALL)
使用TIM_CHANNEL_ALL
不会产生pwm波 ; - 修改MCU型号:方法1、方法2;
- 使用Gitee管理代码;
- HAL库方式的微秒延时;
- SPI:文档1、文档2、文档3;
- 内部温度传感器的使用:文档1、文档2;
- FSMC使用;