一、C语言代码实现(Keil)
1、创建新工程,此次实验选择stm32f103c8芯片,此处我忘记截图了,就简单的口述了。
2、添加新文件,并编写相应的c语言程序段,以完成led流水灯,程序如下:
#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800
#define RCC_APB2ENR (*(unsigned int *)0x40021018)
#define GPIOB_CRL (*(unsigned int *)0x40010C00)
#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 Delay_ms( volatile unsigned int t)//延时函数
{
unsigned int i;
while(t--)
for (i=0;i<800;i++);
}
int main(){
// 开启时钟
RCC_APB2ENR |= (1<<3); // GPIOB
RCC_APB2ENR |= (1<<4); // GPIOC
RCC_APB2ENR |= (1<<2); // GPIOA
// GPIO 设置输出
// 设置GPIOB 最后四位 0001 (B0)
GPIOB_CRL |= (1<<0); // 最后一位设置为1
GPIOB_CRL &= ~(0xE); // 最后2.3.4位设置0
// GPIOC 前四位 0001 (C15)
GPIOC_CRH |= (1<<28); // 前面第4位设置为1
GPIOC_CRH &= ~(0xE0000000); // 前123位设置为0
// GPIOA 后四位 0001 (A0)
GPIOA_CRL |= (1<<0); //最后一位设置为1
GPIOA_CRL &= ~(0xE); //最后2.3.4位设置为0
// 3LED初始化不亮 高电平3
GPIOB_ODR |= (1<<0); // 最后一位设置为1
GPIOC_ODR |= (1<<15); // 倒数15位设置为1
GPIOA_ODR |= (1<<0); // 最后一位设置为1
*(unsigned int*)0x40021018 |= (1<<4);//打开时钟
*(unsigned int*)0x40011004 &= ~(0x0f<<(4*5));//配置输出模式
*(unsigned int*)0x40011004 |= (1<<(4*5));
*(unsigned int*)0x4001100C &= ~(1<<13);//输出低电平
while(1){
GPIOB_ODR &= ~(1<<0); // 1亮
Delay_ms(1000);
GPIOB_ODR |= (1<<0); // 1灭
Delay_ms(1000);
GPIOC_ODR &= ~(1<<15); // 2亮
Delay_ms(1000);
GPIOC_ODR |= (1<<15); // 2灭
Delay_ms(1000);
GPIOA_ODR &= ~(1<<0); // 3亮
Delay_ms(1000);
GPIOA_ODR |= (1<<0); // 3灭
Delay_ms(1000);
}
}
void SystemInit(){ //防报错
}
并完成相应的编译工作,此处要注意将文件startup_stm32f10x_md.s添加入相关工程中。
3、生成相应的hex文件,如图所示:
到此为止相关的程序已准备完毕。
二、实物连线
此处需要完成相关stm32芯片的连接工作。实物连接时需对应好每个引脚的位置,否则会导致实物板无法正常运行
连接引脚:
VCC-3V3
3V3-PA10
RXD-PA9
GND-GND
红灯-PB0
绿灯-PA0
黄灯-C15
此处有许多需要注意的事项,稍有不慎便会影响下一步。
1、核心板插入面包板时尽量要看不到引脚
2、在烧录前核心板要置1
3、在烧录前检查是否能正常连接开发板,如果显示连接超时可按下reset键再试一次,如果仍无法连接,可能usb转与核心板件连接有误或没有置1.
4、在连接时,注意核心板插入哪个串口,连接串口要与核心板插入串口一致
三、烧录
这一步便是将相关程序导入到stm32芯片中来运行,过程如图:
再导入之后板子会自动运行,运行结果如下:
video_20231004_222843