stm32f103zet6基础代码
时间: 2025-05-13 22:57:53 浏览: 13
### STM32F103ZET6基础代码与开发配置
STM32F103ZET6 是一款基于 ARM Cortex-M3 内核的微控制器,具有丰富的外设资源和高性能处理能力。以下是关于其基础代码、示例以及开发配置的相关说明。
#### 1. 初始硬件配置
在开始编写代码之前,需要完成基本的硬件设置。这通常包括时钟树配置、GPIO 初始化以及其他必要的外设初始化。对于 STM32F103ZET6 的典型应用,可以参考官方数据手册中的相关内容[^1]。
#### 2. 使用 HAL 库进行开发
STMicroelectronics 提供了 Hardware Abstraction Layer (HAL) 库来简化开发过程。通过 HAL 库,开发者能够快速实现 GPIO 控制、UART 通信等功能。以下是一个简单的 LED 点亮程序:
```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(); // 初始化 GPIO
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 切换 PC13 引脚状态
HAL_Delay(500); // 延迟 500ms
}
}
// 系统时钟配置函数
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
__HAL_RCC_PWR_CLK_ENABLE();
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 设置 PLL 作为系统时钟源
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();
}
}
// GPIO 初始化函数
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOC_CLK_ENABLE(); // 启用 GPIOC 时钟
GPIO_InitStruct.Pin = GPIO_PIN_13; // 定义引脚为 PC13
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不启用上下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 输出速度低
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); // 初始化 GPIOC
}
```
上述代码展示了如何利用 HAL 库控制 STM32F103ZET6 上的一个 LED(连接到 PC13)。此代码片段涵盖了 GPIO 和时钟的基本配置[^2]。
#### 3. 使用标准库进行开发
除了 HAL 库之外,还可以选择使用 Standard Peripheral Library 进行开发。这种方法更加底层,适合对性能有较高要求的应用场景。下面是一段类似的 LED 控制代码:
```c
#include "stm32f10x.h"
void ClockSetup(void);
void GPIOSetup(void);
int main(void)
{
ClockSetup(); // 配置系统时钟
GPIOSetup(); // 初始化 GPIO
while (1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13); // 将 PC13 设定为高电平
Delay(500000); // 延迟一段时间
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 将 PC13 设定为低电平
Delay(500000); // 延迟一段时间
}
}
// 系统时钟配置
void ClockSetup(void)
{
RCC->CFGR |= RCC_CFGR_SW_PLL; // 选择 PLL 作为系统时钟源
RCC->CR |= RCC_CR_PLLON; // 打开 PLL
while (!(RCC->CR & RCC_CR_PLLRDY)); // 等待 PLL 准备就绪
}
// GPIO 配置
void GPIOSetup(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 启用 GPIOC 外设时钟
GPIOC->CRH &= ~(0xF << 4 * 7); // 清除 PC13 的配置位
GPIOC->CRH |= (0b10 << 4 * 7); // 设置 PC13 为推挽输出模式
}
// 自定义延迟函数
void Delay(volatile uint32_t nCount)
{
while(nCount--);
}
```
这段代码同样实现了 LED 的闪烁功能,但它依赖于更接近寄存器操作的方式[^3]。
#### 4. 调试工具的选择
为了方便调试 STM32F103ZET6 的应用程序,推荐使用 ST-LINK/V2 或其他兼容 JTAG/SWD 协议的调试探针。这些设备可以通过 OpenOCD 或 Keil MDK 等集成环境轻松接入目标板并执行断点调试[^4]。
---
阅读全文
相关推荐

















