STM32最小系统板开发入门:Phi-4-mini-reasoning辅助原理图与编程

张开发
2026/4/12 14:24:29 15 分钟阅读

分享文章

STM32最小系统板开发入门:Phi-4-mini-reasoning辅助原理图与编程
STM32最小系统板开发入门Phi-4-mini-reasoning辅助原理图与编程1. 快速认识STM32最小系统板STM32F103C8T6最小系统板是许多嵌入式开发者的第一块开发板它包含了运行STM32芯片所需的最基本电路。这块蓝色的小板子虽然看起来简单但已经具备了让芯片正常工作的一切要素。这块板子的核心是STM32F103C8T6芯片它基于ARM Cortex-M3内核主频72MHz内置64KB Flash和20KB SRAM。板载资源包括8MHz外部晶振提供系统时钟32.768kHz低速晶振可选用于RTC复位电路带按键调试接口SWD电源指示灯用户LED和按键USB转串口芯片CH340G2. 开发环境准备2.1 硬件准备除了最小系统板本身你还需要准备一根Micro USB线用于供电和串口通信一个ST-Link调试器可选但推荐几根杜邦线用于扩展连接2.2 软件安装Keil MDK-ARM这是最常用的STM32开发环境下载并安装Keil MDK-ARM需要注册安装STM32F1系列设备支持包ST-Link驱动如果你使用ST-Link调试器串口驱动CH340G驱动Windows可能需要手动安装3. 第一个点灯程序3.1 创建Keil工程打开Keil选择Project → New μVision Project选择STM32F103C8T6作为目标设备添加启动文件startup_stm32f10x_md.s配置工程选项在Target选项卡设置晶振频率为8.0MHz在Output选项卡勾选Create HEX File3.2 编写点灯代码大多数最小系统板都连接了一个用户LED到PC13引脚。创建一个main.c文件#include stm32f10x.h void Delay(uint32_t nCount) { for(; nCount ! 0; nCount--); } int main(void) { // 启用GPIOC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 配置PC13为推挽输出 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOC, GPIO_InitStructure); while(1) { GPIO_ResetBits(GPIOC, GPIO_Pin_13); // LED亮 Delay(5000000); GPIO_SetBits(GPIOC, GPIO_Pin_13); // LED灭 Delay(5000000); } }3.3 编译与下载点击Build按钮编译工程连接ST-Link到板子的SWD接口点击Load按钮下载程序观察板载LED是否开始闪烁4. 按键输入与中断4.1 硬件连接大多数最小系统板有一个用户按键连接到PA0。我们用它来控制LED。4.2 配置外部中断#include stm32f10x.h void EXTI0_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line0) ! RESET) { // 翻转LED状态 GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13))); EXTI_ClearITPendingBit(EXTI_Line0); } } void Config_EXTI(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; // 配置PA0为输入 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; GPIO_Init(GPIOA, GPIO_InitStructure); // 配置EXTI0 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line EXTI_Line0; EXTI_InitStructure.EXTI_Mode EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd ENABLE; EXTI_Init(EXTI_InitStructure); // 配置NVIC NVIC_InitStructure.NVIC_IRQChannel EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority 0; NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStructure); } int main(void) { // 初始化LED同前 // 初始化外部中断 Config_EXTI(); while(1) { // 主循环可以执行其他任务 } }5. 串口通信5.1 硬件连接通过板载的CH340G芯片USB接口已经转换为串口连接到PA9(TX)和PA10(RX)。5.2 配置USART#include stm32f10x.h #include stdio.h void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // 启用时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); // 配置PA9为复用推挽输出(TX) GPIO_InitStructure.GPIO_Pin GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // 配置PA10为浮空输入(RX) GPIO_InitStructure.GPIO_Pin GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure); // 配置USART1 USART_InitStructure.USART_BaudRate 115200; USART_InitStructure.USART_WordLength USART_WordLength_8b; USART_InitStructure.USART_StopBits USART_StopBits_1; USART_InitStructure.USART_Parity USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, USART_InitStructure); USART_Cmd(USART1, ENABLE); } int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t)ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) RESET); return ch; } int main(void) { USART1_Init(); printf(Hello STM32!\r\n); while(1) { printf(System running...\r\n); Delay(10000000); } }6. 常见问题解答6.1 程序下载失败怎么办检查ST-Link连接是否正确确认BOOT0和BOOT1跳线帽位置通常都接地尝试按住复位键点击下载然后释放复位键6.2 串口无法通信怎么办检查USB转串口驱动是否安装正确确认波特率设置一致检查TX/RX线是否接反6.3 如何扩展更多外设最小系统板通常留有所有GPIO引脚你可以使用杜邦线连接其他模块制作或购买扩展板注意5V/3.3V电平匹配7. 总结通过这个入门教程我们完成了STM32最小系统板的基础开发环境搭建实现了LED控制、按键中断和串口通信三个基本功能。虽然代码看起来简单但这已经涵盖了嵌入式开发的大部分核心概念。实际开发中你可能会遇到各种问题但不要气馁。STM32的生态系统非常完善几乎任何问题都能在网上找到解决方案。下一步你可以尝试使用标准外设库或HAL库简化开发学习使用定时器、PWM、ADC等外设尝试RTOS实时操作系统开发更复杂的项目如智能家居控制器、小型机器人等获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章