STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验

文章目录

  • 一、使用stm32CubeMX完成初始化过程,采用HAL库编程实现LED流水灯
    • 1、新建项目
    • 2、使用keil进行仿真调试
    • 3、观察GPIO端口的输出波形
  • 二、用寄存器方式完成流水灯实验
    • 1、新建项目
    • 2、烧录运行
  • 三、总结
  • 四,参考链接

一、使用stm32CubeMX完成初始化过程,采用HAL库编程实现LED流水灯

1、新建项目

(1)、在stm32CubeMX界面完成项目的新建
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第1张图片

(2)、在part number选择实验所用芯片(stm32f103c8t6),点击start project
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第2张图片

(3)、首先点击System Core,选择SYS,Debug选择为Serial Wire
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第3张图片

(4)、进入时钟配置,其中发现时钟有两个,HSE和LSE,流水灯实验使用GPIO接口,其中这些接口都在APB2总线里,APB2总线的时钟由HSE控制
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第4张图片

进入Clock Configuration界面,可以观察到HSE来控制APB2总线,所以选择PLLCLK

STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第5张图片

将时钟HSE选择为Crystal/Ceramic Resonator

STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第6张图片

(5)、选择相应的引脚设置输出寄存器,分别GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯

STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第7张图片

(6)、进入Project Manager,设置项目名称以及项目存放地址,并将IDE设置为MDK-ARM
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第8张图片

(7)、进入 Code Generate界面,选择生成初始化.c/.h文件,后面点击Generate Code,完成项目新建

STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第9张图片

2、使用keil进行仿真调试

(1)、进入keil,打开项目文件,将main.c文件中的int main()函数代码替换为以下内容:

SystemClock_Config();//系统时钟初始化
  MX_GPIO_Init();//gpio初始化
  while (1)
  {		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);//PA5亮灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//PC14熄灯
		HAL_Delay(1000);//延时1s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//PA5熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//PC14熄灯
		HAL_Delay(1000);//延时1s		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//PA5熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);//PC14亮灯
		HAL_Delay(1000);//延时1s
	}

STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第10张图片
(2)、接入电路:
对于USB转TTL模块和stm32f103c8t6连接:
GND — GND
3v3 — 3v3
TXD — A10
RXD — A9
红——A5
绿——C14
黄——B9

(3)、烧录运行

3、观察GPIO端口的输出波形

(1)、Debug页面进行更改设置
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第11张图片
(2)、进入调试界面,选择逻辑分析仪
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第12张图片
(3)、添加要观察的引脚:
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第13张图片
(4)、设置Grid大小为1s
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第14张图片
(5)、运行程序观察波形图
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第15张图片

二、用寄存器方式完成流水灯实验

1、新建项目

(1)、选择stm32f103c8芯片
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第16张图片
(2)、选择core,不选择startup
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第17张图片
(3)、添加main.c文件
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第18张图片
(4)、添加驱动文件
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第19张图片

将驱动文件复制到main.c同文件夹下

STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第20张图片

右击文件夹,选择Add Existing Files to Group Source Group 1
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第21张图片
选择All FIles,选择刚刚添加的启动文件添加
STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第22张图片

(5)、将下列代码复制至main.c文件中,并编译

#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<<5;		//PA5低电平
	GPIOB_ODR=0x1<<9;		//PB9高电平
	GPIOC_ODR=0x1<<14;		//PC14高电平
}
void B_LED_LIGHT(){
	GPIOA_ODR=0x1<<5;		//PA5高电平
	GPIOB_ODR=0x0<<9;		//PB9低电平
	GPIOC_ODR=0x1<<14;		//PC14高电平
}
void C_LED_LIGHT(){
	GPIOA_ODR=0x1<<5;		//PA5高电平
	GPIOB_ODR=0x1<<9;		//PB9高电平
	GPIOC_ODR=0x0<<14;		//PC14低电平	
}

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 &= 0x0fffffff; //设置位 清零		
	GPIOC_CRH|=0x22200000;  //PC14推挽输出


	GPIOA_CRL &= 0xFF0FFFFF; //设置位 清零		
	GPIOA_CRL|=0x00200000; //PA5推挽输出

	// 3个LED初始化为不亮(即高点位)
	GPIOB_ODR |= (1<<9); 
	GPIOC_ODR |= (1<<14); 
	GPIOA_ODR |= (1<<5);  
	
	while(j){
		
		B_LED_LIGHT();
		Delay_ms(1000000);

		C_LED_LIGHT();
		Delay_ms(1000000);

		A_LED_LIGHT();
		Delay_ms(1000000);
	}
	
}


void SystemInit(){
	
}

2、烧录运行

STM32最小系统核心板(STM32F103C8T6)完成LED流水灯实验_第23张图片

三、总结

通过本次实验,我熟悉了stm32f103c8t6芯片,一些关于stm32芯片的一些相关知识,明白了通过STM32最小系统核心板GPIO端口控制LED灯,完成流水灯实验,了解GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)。

四,参考链接

https://blog.csdn.net/weixin_46129506/article/details/120780184
http://t.csdn.cn/lDvSz

你可能感兴趣的:(stm32,单片机,arm)