要求:以 STM32最小系统核心板STM32F103C8T6+面板板+3只红绿蓝LED 搭建电路,使用GPIOA-5、GPIOB-9、GPIOC-14这3个端口控制LED灯,轮流闪烁,间隔时长1秒。
1)写出程序设计思路,包括GPIOx端口的各寄存器地址和详细参数;
2)分别用汇编语言,C语言编程实现。
文章目录
一、建立新工程
1.新建工程Light2文件,选择STM32F103C8
2.出现弹窗,不勾选下面的setgep,只勾选core项
3.添加驱动文件
到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c 文件等。
ST 公司提供了 3 个启动文件给我们,分别用于不同容量的 STM32 芯片,这三个文件是:
startup_stm32f10x_ld.s,startup_stm32f10x_md.s,startup_stm32f10x_hd.s
其中,ld.s 适用于小容量 产品;md.s 适用于中等容量产品;hd 适用于大容量产品;
这里的容量是指 FLASH 的大小.判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH
本次选用芯片stm32c8t6其Flash容量为128k,属于中容量,因此我在这里采用startup_stm32f10x_md.s作为启动文件。
添加进去
二、寄存器点亮LED灯
1、GPIO端口初始化
1.时钟配置
找到时钟使能寄存器映射基地址,我们使用的引脚是PA5,PB9,PC14,即GPIOA,B,C三个端口。该三个端口都属于APB2总线
2.找到端口偏移地址以及对应端口所在位置
3.使能对应端口时钟
//----------------APB2使能时钟寄存器 ---------------------
#define RCC_APB2ENR *((unsigned volatile int*)0x40021018)
RCC_APB2ENR|=1<<2|1<<3|1<<4; //APB2-GPIOA、GPIOB、GPIOC外设时钟使能
2、输入输出模式和输出速率设置
本次实验采用通用推挽输出模式,最高输出时钟频率2Mhz。分别用到A5、B9、C14三个引脚。其中A5、B9属于端口配置低寄存器偏移地址为0x00,C14属于端口配置高寄存器偏移地址为0x04。
1、找到GPIOx端口基地址
2、配置对应引脚寄存器,基地址+偏移量
//----------------GPIOA配置寄存器 -----------------------
#define GPIOA_CRL *(<