STM32学习日志20230309——串口通信

  1. 引脚初始化

  1. 核心代码

/* USER CODE BEGIN PFP */
/*重定向printf*/
int __io_putchar(int ch){
 uint8_t c=ch;
 HAL_UART_Transmit(&huart1, &c, 1, 100);
 return ch;
}

/* USER CODE END PFP */

将串口接收函数放入main主函数

 HAL_UART_Receive_IT(&huart1, &aRxBuffer, 1);

重写回调函数

/* USER CODE BEGIN 4 */
/*通过上位机串口软件发送相应的字符来控制LED灯颜色并返回LED灯状态*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

    //if(HAL_UART_GET_FLAG(USART1,UART_IT_RXNE)!=RESET){
        ucTemp = aRxBuffer;   //接收数据转存
        if(ucTemp=='1'){printf("RED OPEN\n");LED_RED;}
        if(ucTemp=='2'){LED_GREEN;
                        //Usart_SendString(USART1,"GREEN OPEN")
        printf("GREEN OPEN");LED_GREEN;}
                if(ucTemp=='3'){printf("BLUE OPEN\n"); LED_BLUE;}
                if(ucTemp=='4'){printf("YELLOW OPEN\n");LED_YELLOW;}
                if(ucTemp=='5'){printf("PURPLE OPEN\n");LED_PURPLE;}
                if(ucTemp=='6'){printf("CYAN OPEN\n");LED_CYAN;}
                if(ucTemp=='7'){printf("WHITE OPEN\n");LED_WHITE;}
                if(ucTemp=='8'){printf("LED OFF\n");LED_RGBOFF;}


            //HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart1_Rx_Cnt,0xFFFF);
            while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);
            Uart1_Rx_Cnt = 0;

            memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组


    //}
    HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断
}
/* USER CODE END 4 */

LED灯头文件

/*
 * LED.h
 *
 *  Created on: Feb 2, 2023
 *      Author: 13450
 */

#ifndef LED_H_
#define LED_H_
#include "stm32f4xx_hal.h"
#define LED1_PIN              GPIO_PIN_6
#define LED1_GPIO_PORT        GPIOF
#define LED1_GPIO_CLK         RCC_AHB1Periph_GPIOF

//GREEN
#define LED2_PIN              GPIO_PIN_7
#define LED2_GPIO_PORT        GPIOF
#define LED2_GPIO_CLK         RCC_AHB1Periph_GPIOF

//Blue
#define LED3_PIN              GPIO_PIN_8
#define LED3_GPIO_PORT        GPIOF
#define LED3_GPIO_CLK         RCC_AHB1Periph_GPIOF


#define ON  0
#define OFF 1

#define LED1(a)if(a) \
          GPIO_SetBits(LED1_GPIO_PORT,LED1_PIN);\
        else \
                GPIO_ResetBits(LED1_GPIO_PORT,LED1_PIN)

#define LED2(a)if(a) \
          GPIO_SetBits(LED2_GPIO_PORT,LED2_PIN);\
        else \
                GPIO_ResetBits(LED2_GPIO_PORT,LED2_PIN)

#define LED3(a)if(a) \
          GPIO_SetBits(LED3_GPIO_PORT,LED3_PIN);\
        else \
                GPIO_ResetBits(LED3_GPIO_PORT,LED3_PIN)




#define LED1_TOGGLE        HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin)
#define LED1_ON         HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET)
#define LED1_OFF        HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET)

#define LED2_TOGGLE        HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin)
#define LED2_ON         HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET)
#define LED2_OFF        HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET)

#define LED3_TOGGLE        HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin)
#define LED3_ON         HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_RESET)
#define LED3_OFF        HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET)




#define LED_RED  \
                    LED1_ON;\
                    LED2_OFF;\
                    LED3_OFF


#define LED_GREEN        \
                    LED1_OFF;\
                    LED2_ON;\
                    LED3_OFF


#define LED_BLUE    \
                    LED1_OFF;\
                    LED2_OFF;\
                    LED3_ON



#define LED_YELLOW    \
                    LED1_ON;\
                    LED2_ON;\
                    LED3_OFF

#define LED_PURPLE    \
                    LED1_ON;\
                    LED2_OFF;\
                    LED3_ON


#define LED_CYAN \
                    LED1_OFF;\
                    LED2_ON;\
                    LED3_ON


#define LED_WHITE \
                    LED1_ON;\
                    LED2_ON;\
                    LED3_ON


#define LED_RGBOFF \
                    LED1_OFF;\
                    LED2_OFF;\
                    LED3_OFF


void LED_GPIO_Config(void);




#endif /* LED_H_ */

3.最终烧录效果展示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值