要求通过单片机实现以下功能:
1,单片机有三种工作模式(定义全局变量MM表示模式,MM=1,2,3表示三种不同的模式)LED控制模式风扇控制模式蜂鸣器控制模式
2.可以在某一个模式下通过拓展板KEY1按键控制设备按键按下一次,设备打开,按键再按下一次,设备关闭(设备管脚输出反向电平)
3.关于模式的切换可以通过以下两种方式:通过串口通信,
电脑端发送当前模式(设置串口接收中断,接收到的字符串进行比较)
电脑发送LED,进入LED模式
电脑发送FAN,进行风扇控制模式
电脑发送BEE,进入蜂鸣器控制模式。
通过底板用户自定义按键进行模式切换按键按下一次进入LED模式,再按一次,进入风扇模式,再按一下,进入蜂鸣器模式
对应控制管脚
中断部分:
user(PA12)
KEY1(PC9)
串口中断(PA9)(PA10)
输出部分:
LED ( PC4)
FAN ( PC6)
BEEP (PA15 )
main.c
#include "main.h"
#include "icache.h"
#include "usart.h"
#include "gpio.h"
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void SystemPower_Config(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#include "stdio.h"
#include "string.h"
//printf重映射
int fputc(int ch,FILE* F)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1 , 10);
return ch;
}
//user实现
int M=0;
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_12)
{
M++;
}
switch(M%3)
{
case 0://LED
if(GPIO_Pin == GPIO_PIN_9)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4);
}
break;
case 1://FAN
if(GPIO_Pin == GPIO_PIN_9)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);
}
break;
case 2://BEE
if(GPIO_Pin == GPIO_PIN_9)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_15);
}
break;
}
}
//串口实现
char buf[32];//记录串口数据
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(strncmp(buf,"LED", 3)==0)
{
M=0;
printf("buf::%s", buf);
}
else if(strncmp(buf, "FAN", 3)==0)
{
M=1;
printf("buf::%s", buf);
}
else if (strncmp(buf,"BEE", 3)==0)
{
M=2;
printf("buf::%s", buf);
}else{
printf("error\n\r");
printf("buf::%s", buf);
}
HAL_UART_Receive_IT(&huart1,(uint8_t*)buf, 3);
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* Configure the System Power */
SystemPower_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ICACHE_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_UART_Receive_IT(&huart1,(uint8_t*)buf, 3);
/* USER CODE BEGIN 3 */
}