基于SMT32U575RIT单片机-中断练习

任务

查看手册对所有的拓展板上和相对应的底板的引脚对应的端口找到以下结论

通过STM32MX软件对各个引脚进行相应的配置 

1.第一种切换模式电脑发送 


#include "main.h"
#include "icache.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes */


/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
char buf[16]={0};//保存串口通信数据
//串口控制模式
int m=0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
	printf("[%s]\n\r", buf);
	if(strcmp(buf,"led")==0)
	{
		m =1;
		//进入LED模式
		printf("mode=%d\n\r",m);
	}
	else if(strcmp(buf,"fan") == 0)
	{
		m=2;
		//进入风扇模式
		printf("mode=%d\n\r",m);
	}
	else if(strcmp(buf,"bee") == 0)
	{
		m=3;
		//进入LED模式
		printf("mode=%d\n\r",m);
	}
	HAL_UART_Receive_IT(&huart1, (uint8_t *)buf, 3);
}


//重写fputc函数
int fputc(int ch, FILE * fp){
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 3);
	return ch;
}

void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_9)
	{
		printf("key\n\r");
		if(m == 1)
		{
			//LED模式
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
		}
		else if(m == 2)
		{
			//风扇模式
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6);
		}
		else if(m == 3)
		{
			//蜂鸣器模式
			HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_15);
		}
	}
}


int main(void)
{

  HAL_Init();
  MX_GPIO_Init();
  MX_ICACHE_Init();
  MX_USART1_UART_Init();
  while (1)
  {
		//开启串口接收中断模式
		HAL_UART_Receive_IT(&huart1,(uint8_t*)buf,3);
  }
}

2.按键模式 控制开关main.c核心代码


#include "main.h"
#include "icache.h"
#include "gpio.h"
#include "stdio.h"

int count1 = 0;//记录user按键被按下的次数
int m1=0;//LED控制模式
int m2=1;//风扇控制模式
int m3=2;//蜂鸣器控制模式


//按键控制模式和开关
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_12)
	{
		count1++;
	}
	else if(GPIO_Pin==GPIO_PIN_9)
	{
		//进入LED模式
		if(count1%3 == m1)
		{
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
		}
		else if(count1%3 == m2)
		//进入风扇模式
		{
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6);
			
		}
		else if(count1%3 == m3)
		//进入蜂鸣器模式
		{
			HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_15);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值