前提:本博客不详细讲原理,重点在于实践,如需要了解原理请参考下列博客:
软件准备
1.Keil uVision5
2.mcuisp
3.CH340驱动程序
软件设置及创建工程
进入Keil uVision5 点击新建project 选择第一个选项
要安装对应的芯片包,我的是stm32F103VE
选择好芯片之后问需不需要这些自带的软件包,我们这个实验用不到的。关闭即可。
双击Source Group 1将启动文件添加至文件夹下,启动文件在官方提供的固件库下下载
程序展示
再在文件夹下新建main.c存放我们编写的程序
根据需要自行屏蔽或者修改达到闪烁/常亮/改变颜色
#include "stm32f10x.h"
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<110;j++);
}
int main(void)
{
//白灯
//打开RCC总控制信号APB2->GPIOB中IO端口B时钟使能
// *(unsigned int *)0x40021018|=(1<<3);
// //配置IO口为通用推挽输出模式,开发板需要配置PB0,PB1,PB5
// *(unsigned int *)0x40010C00|=(1<<0);//PB0 G
// *(unsigned int *)0x40010C00|=(1<<4);//PB1 B
// *(unsigned int *)0x40010C00|=(1<<20);//PB5 R
//配置端口输出数据寄存器当前状态
// *(unsigned int *)0x40010C0C|=(0<<0);//G
// *(unsigned int *)0x40010c0c|=(0<<1);//B
// *(unsigned int *)0x40010c0c|=(0<<5);//R
//打开GPIOB端口的时钟
//蓝灯
// *(unsigned int *)0x40021018 |= ((1) << 3);
// //配置IO口为输出
// *(unsigned int *)0x40010C00 |= ((1) << (4*1));
// //控制ODR寄存器
// *(unsigned int *)0x40010C0C &= ~(1<<1);
//打开GPIOB端口的时钟
//绿灯
*(unsigned int *)0x40021018 |= ((1) << 3);
//配置IO口为输出
*(unsigned int *)0x40010C00 |= ((1) << (4*0));
// //控制ODR寄存器
// *(unsigned int *)0x40010C0C &= ~(1<<0);
//打开GPIOB端口的时钟
//红灯
// *(unsigned int *)0x40021018 |= ((1) << 3);
// //配置IO口为输出
// *(unsigned int *)0x40010C00 |= ((1) << (4*5));
// //控制ODR寄存器
// *(unsigned int *)0x40010C0C &= ~(1<<5);
while(1)
{
int i=0;
*(unsigned int*)(0x40010C0C) &=~(1<<0); //点亮小灯
for (i=0; i<10000; i++); //延时一段时间
*(unsigned int*)(0x40010C0C) |=(1<<0); //熄灭小灯
for (i=0; i<30000; i++); //延时一段时间
}
}
void SystemInit(void)
{
}
void System Init() 是为了骗过编译器不报错
project架构
stm32f10x.h自己创建一个空白的头文件,其会自动匹配。
编译
自动生成的文件
object文件夹下有编译后产生的文件
烧录程序
连接stm32和电脑
选择编译好的程序文件.hex
搜索串口搜索到CH340对应stm32
上述检查无误点击开始编程,烧录成功会有提示。
RESET复位可以重新执行程序,如果没有成功可以按一下复位键
效果图
参考博客: