前言
在做STM32单片机实验开发我们之前进行了开发环境的搭建,工程模板的建立以及单片机基础知识和GPIO相关知识的准备,下面我们进行32固件库开发第一个实验:控制LED,堪称单片机界入门的 hello Word,不仅可以熟悉单片机的引脚控制,更能对单片机的时钟进行深入了解,废话不多说,咱们进入正文,跳转文尾
一、硬件资源
我的实验采用的STM32C8T8最小系统单片机,采用其他的单片机也可以进行本实验
1、芯片命名介绍:
STM32F103C8T6命名说明
[tr]符号说明[/tr]
| STM32 | ST公司采用ARM Cortex-M3内核的32位微控制器 |
| F | 芯片子系列 |
| 103 | 增强型系列 |
| C | 引脚数,T:36,C:48,R:64,V:100,Z:144,I:176 |
| 8 | 内部Flash容量(单位:字节),6:32K,8:64K,B:128K,C:256K,D:384K,E:512K,G:1M |
| T | 芯片封装,H:BGA,T:LQFP,U:VFQFPN |
| 6 | 工作温度,6: -40 ~ 85℃,7: -40 ~ 105℃ |
2、芯片资源介绍
STM32F103C8是高性能ARM-M3系列, 32位RISC核心操作,工作在一个72 MHz的频率,拥有Flash =64Kb RAM = 20Kb、两组10通道12位同步A/D、三个通用16位定时器和一个PWM定时器、1个CAN、2个I2C、2个SPI、3个URAT通道,一个USB等内嵌资源的芯片
一、电气原理图
下面是本次实验的板子,与LED原理图
因为板子只自带一个LED,因为不需要其他的控制方式,只需要芯片内给PC13 引脚置低,即可实现LED电路导通,另外需要找到烧写代码的下载原理图,连接电路,我是使用SWD下载方式,只需要连接4根线,找到板子上的SWD接口原理图并对照实物图
二、电器件连接
因为不需要其他的控制方式,只需要连接一个下载电路。
三、开发思路
1、须知
- 需要控制引脚PC13,即GPIOC第13个引脚,低电平有效
- 找到IO口对应的时钟总线 ,即ABP2 。可查阅 —— 图一、系统框架图
- 关于GPIO几个重要函数

2、控制LED流程与步骤:
四、代码实践
因为LED 作为STM32板子的一个外设,我将其封装为一个模块放入HARDWARE文件中,以后需要可以直接调用,
led.h文件
#ifndef LED_H
#define LED_H
void LED_Init(void);
#endif
==引用条件编译原因,防止多文件编译时,发生重复编译 ==
下面是led.c文件函数示例:
#include "led.h"
#include "stm32f10x.h" //顶层头文件
void LED_Init(void)
{
GPIO_InitTypeDef LED_InitStruct; //叶柄:定义一个结构体变量LED_InitStruct
//1、打开串口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
//2、配置并初始化串口
LED_InitStruct.GPIO_Pin = GPIO_Pin_13; //PC13
LED_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
LED_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &LED_InitStruct); //初始化串口
//3、控制串口读写(一般是主函数控制读写,这里LED默认关闭,即置高)
GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
主函数main.c
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main ()
{
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮
delay_s(1);
GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED熄灭
delay_s(1);
}
return 0;
}
五、问题与思考
检查不到设备:
解决方式:检查驱动是否安装好,检查型号选择是否正确ST-link等
debug,中看不到寄存器——案例一
需引入一个文件STM32F103_SVD文件
函数相似导致选错 ——案例二,如下
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE );
注意分清楚函数字母的含义就不会再次出错了
思考
1、为什么在led.c文件中引用了rcc、gpio相关函数,却没有调用相关头文件,而用STM32f10x代替了所有库函数头文件
原因:顶层头文件stm32f10x.h这个文件包含了STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定义、中断向量表、存储空间的地址映射等,
好吧可能是不是这个原因,我查不到
前言
在做STM32单片机实验开发我们之前进行了开发环境的搭建,工程模板的建立以及单片机基础知识和GPIO相关知识的准备,下面我们进行32固件库开发第一个实验:控制LED,堪称单片机界入门的 hello Word,不仅可以熟悉单片机的引脚控制,更能对单片机的时钟进行深入了解,废话不多说,咱们进入正文,跳转文尾
一、硬件资源
我的实验采用的STM32C8T8最小系统单片机,采用其他的单片机也可以进行本实验
1、芯片命名介绍:
STM32F103C8T6命名说明
[tr]符号说明[/tr]
| STM32 | ST公司采用ARM Cortex-M3内核的32位微控制器 |
| F | 芯片子系列 |
| 103 | 增强型系列 |
| C | 引脚数,T:36,C:48,R:64,V:100,Z:144,I:176 |
| 8 | 内部Flash容量(单位:字节),6:32K,8:64K,B:128K,C:256K,D:384K,E:512K,G:1M |
| T | 芯片封装,H:BGA,T:LQFP,U:VFQFPN |
| 6 | 工作温度,6: -40 ~ 85℃,7: -40 ~ 105℃ |
2、芯片资源介绍
STM32F103C8是高性能ARM-M3系列, 32位RISC核心操作,工作在一个72 MHz的频率,拥有Flash =64Kb RAM = 20Kb、两组10通道12位同步A/D、三个通用16位定时器和一个PWM定时器、1个CAN、2个I2C、2个SPI、3个URAT通道,一个USB等内嵌资源的芯片
一、电气原理图
下面是本次实验的板子,与LED原理图
因为板子只自带一个LED,因为不需要其他的控制方式,只需要芯片内给PC13 引脚置低,即可实现LED电路导通,另外需要找到烧写代码的下载原理图,连接电路,我是使用SWD下载方式,只需要连接4根线,找到板子上的SWD接口原理图并对照实物图
二、电器件连接
因为不需要其他的控制方式,只需要连接一个下载电路。
三、开发思路
1、须知
- 需要控制引脚PC13,即GPIOC第13个引脚,低电平有效
- 找到IO口对应的时钟总线 ,即ABP2 。可查阅 —— 图一、系统框架图
- 关于GPIO几个重要函数

2、控制LED流程与步骤:
四、代码实践
因为LED 作为STM32板子的一个外设,我将其封装为一个模块放入HARDWARE文件中,以后需要可以直接调用,
led.h文件
#ifndef LED_H
#define LED_H
void LED_Init(void);
#endif
==引用条件编译原因,防止多文件编译时,发生重复编译 ==
下面是led.c文件函数示例:
#include "led.h"
#include "stm32f10x.h" //顶层头文件
void LED_Init(void)
{
GPIO_InitTypeDef LED_InitStruct; //叶柄:定义一个结构体变量LED_InitStruct
//1、打开串口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
//2、配置并初始化串口
LED_InitStruct.GPIO_Pin = GPIO_Pin_13; //PC13
LED_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
LED_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &LED_InitStruct); //初始化串口
//3、控制串口读写(一般是主函数控制读写,这里LED默认关闭,即置高)
GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
主函数main.c
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main ()
{
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮
delay_s(1);
GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED熄灭
delay_s(1);
}
return 0;
}
五、问题与思考
检查不到设备:
解决方式:检查驱动是否安装好,检查型号选择是否正确ST-link等
debug,中看不到寄存器——案例一
需引入一个文件STM32F103_SVD文件
函数相似导致选错 ——案例二,如下
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE );
注意分清楚函数字母的含义就不会再次出错了
思考
1、为什么在led.c文件中引用了rcc、gpio相关函数,却没有调用相关头文件,而用STM32f10x代替了所有库函数头文件
原因:顶层头文件stm32f10x.h这个文件包含了STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定义、中断向量表、存储空间的地址映射等,
好吧可能是不是这个原因,我查不到
举报