单片机STM32F103入门
引言
单片机(Microcontroller Unit, MCU)是一种将中央处理器、存储器、输入输出接口等集成在一块芯片上的微型计算机系统。本教程旨在介绍如何使用一种常见的单片机——STM32F103系列(也被称为“蓝 pill”),并提供一些基本的编程实例。
环境搭建
必要工具与软件
– STM32CubeIDE
– ST-Link V2 编程器或 USB 转串口线
– STM32 Discovery板或类似开发板
安装STM32CubeIDE
1. 访问[STM32CubeIDE官网](https://www.st.com/en/development-tools/stm32cubeide.html)下载最新版本。
2. 按照安装向导提示完成安装。
3. 启动STM32CubeIDE,创建一个新的STM32项目。
配置ST-Link V2
1. 将ST-Link V2连接到电脑USB端口。
2. 在STM32CubeIDE中设置调试器为ST-Link V2。
3. 连接开发板上的SWD接口至ST-Link V2。
第一个程序:LED闪烁
创建项目
1. 打开STM32CubeIDE,选择`File` > `New` > `STM32 Project`。
2. 选择MCU型号,例如STM32F103C8T6。
3. 选择HAL库初始化,并生成代码。
编写代码
```c
#include "stm32f1xx_hal.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
HAL_Delay(500);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/ 初始化主时钟
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/ 初始化CPU, AHB和APB总线时钟
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOD_CLK_ENABLE();
/Configure GPIO pin Output Level
*/
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
/Configure GPIO pin : PD12
*/
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
```
编译与下载
1. 在STM32CubeIDE中点击编译按钮。
2. 使用ST-Link V2进行固件下载。
3. 观察开发板上对应的LED是否按预期闪烁。
作者:寂然如故