STM32单片机
一.参考资料
二.示例讲解
三.外设的使用方法
四.USB功能
五.STM32单片机简介
STM32单片机是STMicroelectronics公司推出的一款高性能、低功耗的32位微控制器,具有丰富的外设功能和灵活的扩展接口,广泛应用于工业控制、消费电子、通信等领域。
STM32单片机采用ARM Cortex-M3 处理器,具有高性能、低功耗、可扩展性等优点。其内置多种外设,如GPIO、ADC、DAC、UART、SPI、I2C、CAN、USB等,可以满足各种应用需求。
六.常见STM32单片机开发环境
- STM32CubeIDE
- Keil uVision
- VSCode + STM32CubeIDE for Visual Studio Code 插件
七.STM32单片机开发环境搭建(VSCode + STM32CubeIDE for Visual Studio Code 插件)
- 安装VSCode (https://code.visualstudio.com/Download)
- 在VSCODE中安装STM32Cube插件 (https://marketplace.visualstudio.com/items?itemName=stmicroelectronics.stm32-vscode-extension)
- 安装: STM32CubeMX
- 安装: STMMCUFinder
- 参考视频教程: https://space.bilibili.com/2100019006/lists/6707537?type=season
八.创建一个串口项目
打开 STM32插件 -> Launch STM32CubeMX
选择MCU型号: STM32C031CBT6
配置:
- SYS -> Debug 选择 Serial Wire ,Timebase Source 设置为 TIM4. (这里不能使用 SysTick ,因为SysTick是会被 FreeRTOS 占用的)
配置串口参数
- USART1 -> Mode -> Asynchronous -> Baudrate -> 115200 -> Word Length -> 8 bits -> Stop bits -> 1 -> Parity -> None -> Hardware Flow Control -> None
配置时钟,为 72MHZ
配置 FreeRTOS,
- 选择 Interface: CMSIS_V1,
- 选择 Advanced setting: 中的 USE_NEWLIB_PEENTRANTS 设置为 enable,
配置工程 Project Manager:
- Project Name: 写一个工程名称
- 保存位置设置: 设置一个工程保存位置
- Toolchain / IDE: Cmake + GCC
生成代码
- 点击 Generate Code
打开工程
- 在VSCode中打开生成的工程文件夹
配置工程设备名称: 非常重要


- 点击 STM32 插件中的 "Setup STM32Cube projects" 按钮.
- 输入:STM32Cube.SetDeviceName 并选择.
- 输入设备名称: STM32C031CBT6
- 保存.
点击左侧栏中的 "调试并运行" 按钮.

- 点击 "创建一个launch.json文件" 按钮.
- 选择 "STM32Cube: STLink GDB Server" 配置.自动生成launch.json文件
- 点击上面的调试配置,即可运行调试了.
九.再次运行 MX
- 如果需要修改工程,添加一些基础代码,可以再次运行 STM32CubeMX 来生成代码.
- 点击 "STEM32 插件" 中的 "STM32CubeMX" 按钮."
- 打开后选择本工程中的 "***.ioc" 文件".
- 修改代码.
- 点击 "Generate Code" 按钮.
十. 工程编译分析
- 本工程是使用Cmake进行构建的.
在工程的目录下有一个CMakeLists.txt文件.这个文件是Cmake的构建脚本. 如果需要添加新的代码,很多时候需要修改这个文件的内容.如下: 添加新的源文件:
cmake# Add sources to executable target_sources(${CMAKE_PROJECT_NAME} PRIVATE # Add user sources here Core/Src/w25qxx.c ) # Add include paths target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE # Add user defined include paths )
在工程的目录下还有一个文件 "CMakePresets.json" ,这个文件是Cmake的预设文件. 这个文件中定义了Cmake的构建配置. 一般不需要修改这个文件.
注意项目中的 CMake插件,也是很重要的. 这个插件可以读取 CMakePresets.json 文件中的配置,并生成对应的构建配置. 如果需要修改编译配置,比如将 "Debug" 修改为 "Release", 可以在CMake插件中进行修改.

十一. 工程结构分析
- 工程的源代码放置在
Core/Src目录下.这个目录下存放了所有的源代码文件. Core/Inc目录下存放了所有的头文件.Drivers/STM32F1xx_HAL_Driver/Src目录下存放了所有的HAL驱动代码.Middlewares/Third_Party/FreeRTOS/Source目录下存放了FreeRTOS的源代码.main.c是项目的入口文件.main()函数中应该 调用MX_GPIO_Init();和MX_USART1_UART_Init();来初始化GPIO和串口,还有一些其它的初始化函数.- 生成一个默认任务
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);- 在
StartDefaultTask()函数中编写任务代码.
十二. 如何使用printf来输出数据到串口?
- 在
Core/Src/syscalls.c文件中定义了一个弱函数 :
extern int __io_getchar(void) __attribute__((weak));我们只需要实现这个弱函数就可以了.
- 在
Core/Src/Main.c文件中添加以下代码:
int __io_putchar(int ch) {
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
return ch;
}并且添加 #include <stdio.h> 头文件.否则 printf() 函数会找不到. 3. 在程序的其它的地方只需要调用 printf() 函数即可. 注意
printf() 函数在调用时,文本最后一定要加上换行符 \n,否则输出可能不会立即显示.
