STM32系列单片机由意法半导体(STMicroelectronics)生产,凭借其高性能、低功耗和丰富的外设配置,广泛应用于嵌入式系统开发中。STM32F103C8T6作为STM32F1系列中的一款经典型号,以其性价比高、功能强大,深受开发者青睐。本文将带大家深入探索STM32F103C8T6的基本特性,并通过一个简单的应用实例帮助大家理解如何开始使用该型号单片机。
STM32F103C8T6概述STM32F103C8T6是基于ARM Cortex-M3内核的32位微控制器,具有较高的处理能力和丰富的外设接口。其主要特点包括:
- 内核:Cortex-M3,最高主频72MHz
- 内存:64KB Flash,20KB SRAM
- 外设:多个定时器、USART、I2C、SPI、ADC等
- 输入输出:37个GPIO引脚,支持多种功能
- 工作电压:2.0V到3.6V
- 工作温度:-40℃到+85℃
STM32F103C8T6的性能和资源足以支持各种中小型嵌入式项目,无论是工业控制、物联网设备、传感器采集还是通信协议的实现,都能游刃有余。
开发环境配置开发STM32F103C8T6通常需要以下工具:
- 开发板:常见的开发板如STM32F103C8T6最常见的开发板为Blue Pill。
- 编程器:ST-LINK/V2或J-Link可以用来进行编程和调试。
- 开发环境:Keil uVision或STM32CubeIDE。
在这里,我们将使用STM32CubeIDE来进行开发,因为它集成了代码编写、调试和生成配置的工具,适合新手入门。
基本的LED闪烁程序我们来编写一个简单的LED闪烁程序,利用STM32F103C8T6的一个GPIO引脚控制LED灯闪烁,演示如何使用该单片机进行基本的GPIO操作。
配置步骤- 启动STM32CubeIDE,创建一个新的STM32项目,选择型号为STM32F103C8T6。
- 在Pinout & Configuration界面中,选择一个GPIO引脚(如PC13)作为输出引脚。
- 配置时钟系统,默认设置即可。
- 生成代码并打开项目。
编写代码接下来,我们编写一个简单的程序,通过控制GPIO引脚的电平来实现LED的闪烁。
#include "main.h"
int main(void)
{
// 初始化HAL库
HAL_Init();
// 配置系统时钟
SystemClock_Config();
// 启动GPIOC时钟
__HAL_RCC_GPIOC_CLK_ENABLE();
// 配置PC13为输出模式
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_13;
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);
// 主循环
while (1)
{
// 设置PC13为高电平,点亮LED
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
HAL_Delay(500); // 延时500毫秒
// 设置PC13为低电平,熄灭LED
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
HAL_Delay(500); // 延时500毫秒
}
}
// 系统时钟配置函数
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// 配置HSE晶振和PLL
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL9; // 设置PLL倍频
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
// 初始化失败,进入死循环
while (1);
}
// 配置系统时钟
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | 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)
{
// 配置失败,进入死循环
while (1);
}
}
代码解析- HAL库初始化:首先调用HAL_Init()初始化HAL库,这是STM32编程的标准步骤。
- GPIO配置:通过HAL_GPIO_Init()配置PC13为输出推挽模式,用于驱动外接的LED。
- 延时控制:通过HAL_Delay()函数设置每次点亮或熄灭LED的时间间隔,500毫秒一次。
- 系统时钟配置:通过SystemClock_Config()函数配置系统时钟,使用HSE晶振和PLL倍频,确保系统时钟稳定运行。
编译与烧录编写完代码后,可以通过STM32CubeIDE进行编译,并使用ST-LINK/V2调试器将程序烧录到STM32F103C8T6开发板上。完成烧录后,开发板上的LED灯应该每500毫秒闪烁一次。
总结STM32F103C8T6是一款功能强大的微控制器,适合用来做各种中小型嵌入式项目。通过本文的LED闪烁示例,我们展示了如何配置GPIO、进行延时操作以及使用系统时钟。在此基础上,开发者可以进一步探索STM32的各种外设和功能,为自己的项目提供更多的可能性。
|