STM32是非常常见的一种单片机,在平常的生成生活中有广泛的应用和市场。STM32一般是通过Keil进行编程,这里我们通过使用Keil给stm32f103xx创建一个点亮LED灯Helloword程序,一起来进入STM32的世界。
首先,打开Keil然后新建一个项目。
创建一个存放名为T110项目的文件夹
选择本次项目需要用到那些库文件,因为本次项目只是用寄存器点亮LED灯,所以仅选CORE和Startup即可。
然后点击工程User110目录,点击”AddExisting Files…”按钮,将刚才创建的main.c文件正式添加到工程目录里。
下面为本次项目仅需编辑的的一个文件main.c文件要用到的代码;
//========代码开始=============
#include "stm32f10x.h"
//BY202303OK--STM32F103C8T6---KEIL534---LED灯负极连B5针脚并且正极连接3V3针脚
//以寄存器方式点LED灯
//编译出HEX文件后,用Flash Loader工具烧写到开发板。
//新建工程仅勾选了CORE,Startup两个选项。
//https://blog.csdn.net/m0_57277815/article/details/127252068
//----------------APB2使能时钟寄存器 ---------------------
#define RCC_APB2ENR *((unsigned volatile int*)0x40021018)
//----------------GPIOA配置寄存器 -----------------------
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)
#define GPIOA_ODR *((unsigned volatile int*)0x4001080C)
//----------------GPIOB配置寄存器 -----------------------
#define GPIOB_CRL *((unsigned volatile int*)0x40010C00)
#define GPIOB_ODR *((unsigned volatile int*)0x40010C0C)
//----------------GPIOC配置寄存器 -----------------------
#define GPIOC_CRH *((unsigned volatile int*)0x40011004)
#define GPIOC_ODR *((unsigned volatile int*)0x4001100C)
//延时函数
void Delay()
{
u32i=0;
for(;i<2000000;i++);
}
int main(void)
{
RCC_APB2ENR|=1<<2|1<<3|1<<4; //APB2-GPIOA、GPIOB、GPIOC外设时钟使能,
GPIOA_CRL&=0xFFF0FFFF; //设置位 清零
GPIOA_CRL|=0x00020000; //PB5推挽输出
GPIOA_ODR&=~(1<<4); //设置初始灯为灭
GPIOB_CRL&=0xFF0FFFFF; //设置位 清零
GPIOB_CRL|=0x00200000; //PB5推挽输出
GPIOB_ODR&=~(1<<5); //设置初始灯为灭
GPIOC_CRH&=0xF0FFFFFF; //设置位 清零
GPIOC_CRH|=0x02000000; //PB5推挽输出
GPIOC_ODR&=~(1<<14); //设置初始灯为灭
while(1){
//A灯
GPIOA_ODR|=1<<4; //PB5高电平
Delay();
GPIOA_ODR&=~(1<<4); //PB5低电平,因为是置0,所以用按位与
//B灯
GPIOB_ODR|=1<<5; //PB5高电平
Delay();
GPIOB_ODR&=~(1<<5); //PB5低电平,因为是置0,所以用按位与
//C灯
GPIOC_ODR|=1<<14; //PB5高电平
Delay();
GPIOC_ODR&=~(1<<14); //PB5低电平,因为是置0,所以用按位与
}
}
//=========代码结束==============
33
44
55
网友评论 comments