基于STM32F103的LED点亮

一、了解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、烧录效果

实验效果如下:

如有不足请予补充,谢谢

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值