嵌入式作业八(使用Cube实现流水灯,并采用中断控制流水灯亮灭)

本文介绍了使用STM32CubeMx在STM32F103C8开发板上通过Cube点亮流水灯,并演示了如何利用中断控制灯的亮灭。首先,详细步骤讲解了Cube的安装、新建工程、配置GPIO和编写基础代码。接着,展示了中断控制的实现,包括设置中断、重写中断回调函数和控制灯的亮灭操作。
摘要由CSDN通过智能技术生成

文章目录

目录

文章目录

一、Cube点亮流水灯

1、安装Cube

2、新建工程

3、代码编写

4、结果 

二、中断控制流水灯

1、新建工程

2、重写中断函数

3、结果

 4、波形图

5、中断控制一个灯亮灭

参考链接


一、Cube点亮流水灯

1、安装Cube

安装教程可参考:【STM32】STM32 CubeMx使用教程一--安装教程-CSDN博客​​​​​​

2、新建工程

1.File-->new project

 2.选择芯片(stm32f103c8)

3.A->Z---->SYS--->Debug--->Serial Wire

4. RCC--->High Speed Clock(HSE)--->Crystal/Ceramic Resonator

 5.选择PA1、PB1、PB10设置为GPIO_Output

6.Clock Configuration--->将图片所示位置打开

7.自定义工程名称和工程打开软件

 

 8.Project Manager--->Code Generator--->选择图示选项

9. 最后点击generate即可

3、代码编写

while (1)
  {
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
	  HAL_Delay(1000);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
	  HAL_Delay(1000);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);
	  HAL_Delay(1000);
  }

4、结果 

二、中断控制流水灯

1、新建工程

与上述差不多一样,只是需要多选择一个管脚进行中断配置
选择PA3作为开关

 设置GPIO

 使能中断

2、重写中断函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin == SWITCH_Pin){
  //获取A3的电位,如果是低电平就一直死循环,使流水灯停止工作
	    while(HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin)==GPIO_PIN_RESET){}
  }
}
while (1)
  {
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
	  HAL_Delay(1000);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);
	  HAL_Delay(1000);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);
	  HAL_Delay(1000);
  }

3、结果

 4、波形图

5、中断控制一个灯亮灭

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin == SWITCH_Pin){
	  GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port, SWITCH_Pin);
	  
	  if(pinState == GPIO_PIN_RESET){
		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
	  }else{
		  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
	  }
  }
}

参考链接

使用Cube实现流水灯,并采用中断控制流水灯亮灭-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值