一、了解stm32f103c8t6最小核心板的主要引脚接口
STM32F103C8T6最小系统板原理图
STM32F107T6是STMicroelectronics推出的一款基于ARM Cortex-M3内核的32位微控制器。它具有丰富的外设功能和性能特点,适用于各种应用领域,如工业控制、消费类电子、通信设备等。该微控制器具有以下主要特点:
处理器性能:基于ARM Cortex-M3内核,运行频率高达72MHz,具有高性能和低功耗的特点。
存储器:包括闪存和RAM,可根据具体型号配置不同容量的存储器。
外设接口:包括多个通用定时器、通用串行接口、SPI、I2C、CAN等常用接口,以及模拟接口如ADC和DAC等。
通信接口:支持多种通信接口协议,如USB、Ethernet、USART等,方便与外部设备进行通信。
低功耗特性:支持多种低功耗模式,可根据需求进行灵活配置以实现节能目的。
丰富的开发支持:STMicroelectronics提供了丰富的开发工具和软件支持,如STM32CubeMX和HAL库,方便开发人员进行软件开发和调试。
其最小系统板原理图如下:
stm32f103c8t6引脚图及其功能如下:
二、掌握Keil 开发stm32程序的环境搭建和设置
首先我们先下载好Keil5 uVIsion5,我的下载包是在某b站:江协科技 关于STM32入门教程视频简介下提取的
首先我们在可以容易找到的地方创建一个文件夹
以此方便我们存找我们的keil文件,然后我们右击项目文件,添加.c文件
选择C语言:
我用的也是江协科技的STM32资料中的文件复制到新建的项目下(这些文件图标带有钥匙是不可以更改源码的):
创建好main.c文件后即可编写代码烧录板子点亮LED了。
三、外接LED灯,编写程序让LED灯周期性亮灭
1、Protues仿真实验
我们可以搭建好整体电路,接入LED小灯,根据输入端口高低电频的转变来控制小灯亮灭,设置好高低电频交替时间即可实现周期性小灯亮灭,生成代码后缀文件名hex的文件,录入仿真里的芯片即可开仿真,我带了实验器材所以直接烧录,没有进行仿真,但是仿真思路是不变的。
2、接线LED
我借鉴的是学长的代码,所以LED端口接入的是一样的,我只接入了两个LED,实验结果是一样的
黄——B9
绿——C15
3、代码烧录
代码如下
#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800
#define RCC_APB2ENR (*(unsigned int *)0x40021018)
#define GPIOB_CRH (*(unsigned int *)0x40010C04)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)
#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
#define GPIOC_ODR (*(unsigned int *)0x4001100C)
#define GPIOA_ODR (*(unsigned int *)0x4001080C)
void SystemInit(void);
void Delay_ms(volatile unsigned int);
void A_LED_LIGHT(void);
void B_LED_LIGHT(void);
void C_LED_LIGHT(void);
void Delay_ms( volatile unsigned int t)
{
unsigned int i;
while(t--)
for (i=0;i<800;i++);
}
void A_LED_LIGHT(){
GPIOA_ODR=0x0<<4; //PA4低电平
GPIOB_ODR=0x1<<9; //PB9高电平
GPIOC_ODR=0x1<<13; //PC13高电平
}
void B_LED_LIGHT(){
GPIOA_ODR=0x1<<4; //PA4高电平
GPIOB_ODR=0x0<<9; //PB9低电平
GPIOC_ODR=0x1<<13; //PC13高电平
}
void C_LED_LIGHT(){
GPIOA_ODR=0x1<<4; //PA4高电平
GPIOB_ODR=0x1<<9; //PB9高电平
GPIOC_ODR=0x0<<13; //PC13低电平
}
int main(){
int j=100;
// 开启时钟
RCC_APB2ENR |= (1<<3); // 开启 GPIOB 时钟
RCC_APB2ENR |= (1<<4); // 开启 GPIOC 时钟
RCC_APB2ENR |= (1<<2); // 开启 GPIOA 时钟
// 设置 GPIO 为推挽输出
GPIOB_CRH&= 0xffffff0f; //设置位 清零
GPIOB_CRH|=0x00000020; //PB9推挽输出
GPIOC_CRH &= 0xff0fffff; //设置位 清零
GPIOC_CRH|=0x00300000; //PC15推挽输出
GPIOA_CRL &= 0xfff0ffff; //设置位 清零
GPIOA_CRL|=0x00010000; //PA4推挽输出
// 3个LED初始化为不亮(即高点位)
GPIOB_ODR |= (1<<9);
GPIOC_ODR |= (1<<13);
GPIOA_ODR |= (1<<4);
while(j){
B_LED_LIGHT();
Delay_ms(2000);
C_LED_LIGHT();
Delay_ms(3000);
A_LED_LIGHT();
Delay_ms(5000);
}
}
代码打好后,我们先编译看看有没有错误
点击左上角下箭头图标,即可编译
我这里是改好了的代码所以没有警告也没有编译错误,先前使用学长的代码时,遇到一个问题,这串代码在时无法进行编译
void SystemInit(){
}
删掉后即可编译成功,所以需要注意一下,如果你保存的模版源码里已经有了这个函数,这个函数就可以不用再定义(应该是这样的)
4、烧录效果
实验效果如下:
如有不足请予补充,谢谢