外部中断信号控制LED灯开关

HAL库中串口发送的重要函数

阻塞式发送函数(初学者,推荐使用)
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart,uint8_t *pData,
uint16_t Size,uint32_t Timeout);
非阻塞式发送函数
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart,uint8_t *pData,
uint16_t Size);
发送完毕中断回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);                                            void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);

HAL库中串口接收的重要函数

阻塞式发送函数
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart,uint8_t*pData,uint16_t Size,uint32_t Timeout);
非阻塞式发送函数(推荐使用)
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,uint8_t *pData,
uint16_t Size);
发送完毕中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);                                              void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);
(发送推荐阻塞式不用回调(事件多则用非阻塞),接收用非阻塞。 )

任务描述:

(1)开机后,向串口1发送“hello world! ”。

(2)串口1收到字节指令“OxA1”,打开LED1,发送“LED1 Open ! ”。

(3)串口1收到字节指令“OxA2”,关闭LED1,发送“LED1 Closed ! ”。

(4)在串口发送过程中,打开LED2作为发送数据指示灯。

代码展示:

#include "main.h"
#include "usart.h"
#include "gpio.h"
#define LED1_ON() HAL_GPIO_WritePin(GPIOD,GPIO_PIN_3,GPIO_PIN_SET);//开关灯宏定义
#define LED1_OFF() HAL_GPIO_WritePin(GPIOD,GPIO_PIN_3,GPIO_PIN_RESET);
#define LED2_ON() HAL_GPIO_WritePin(GPIOD,GPIO_PIN_4,GPIO_PIN_SET);
#define LED2_OFF() HAL_GPIO_WritePin(GPIOD,GPIO_PIN_4,GPIO_PIN_RESET);

uint8_t Tx_str1[]= "hello world\n\r";
uint8_t Tx_str2[]= "led1 open!\n\r";
uint8_t Tx_str3[]= "led1 close!\n\r";
uint8_t Rx_dat = 0;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//回调函数
{
	if(huart->Instance == USART1)
	{
		if(Rx_dat == 0xa1)//接收到‘a1’led1打开led2闪烁一次
		{
			LED1_ON();
			LED2_ON(); 
			HAL_UART_Transmit(&huart1,Tx_str2,sizeof(Tx_str2),10000);
			LED2_OFF();
			HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
		}
		else if(Rx_dat == 0xa2)//接收到‘a2’led1关闭led2闪烁一次
		{
			LED1_OFF();
			LED2_ON(); 
			HAL_UART_Transmit(&huart1,Tx_str3,sizeof(Tx_str3),10000);
			LED2_OFF();
			HAL_UART_Receive_IT(&huart1,&Rx_dat,1);	
		}
	}
}
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  LED1_ON(); //复位led1闪烁
  HAL_UART_Transmit(&huart1,Tx_str1,sizeof(Tx_str1),10000);
  LED1_OFF();
  HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
  /* USER CODE END 2 */
}

usart使用方法可在“stm32fqxx_hal_uart.c”文件中的##### How to use this driver #####里找到使用函数方法。

但是目前串口只能发送一次数据,代码还在修改ing...
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值