一、首先使用STM32CUBEMX新建一个工程
二、打开工程文件
1.在usart.c中添加以下代码
/* USER CODE BEGIN 0 */
#include "stdio.h"
#include "string.h"
uint8_t aRxBuffer;//数据缓存
char USART_RX_BUF[USART_REC_LEN];//接收到的数据
uint16_t USART_RX_STA;//接收标志位
//printf函数重定向
int fputc(int ch,FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);
return ch;
}
int fgetc(FILE *f)
{
uint8_t ch=0;
HAL_UART_Receive(&huart1,&ch,1,0xFFFF);
return ch;
}
/* USER CODE END 0 */
2.然后在最后面加入中断回调函数
/* USER CODE BEGIN 1 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UNUSED(huart);
if(huart==&huart1)
{
if(USART_RX_STA<255)
{
USART_RX_BUF[USART_RX_STA ++]=aRxBuffer ;
if((USART_RX_BUF[USART_RX_STA -1]==0x0A)&&(USART_RX_BUF[USART_RX_STA -2]==0x0D))
{
HAL_UART_Transmit(&huart1 ,(uint8_t *)&USART_RX_BUF ,USART_RX_STA,0xFFFF);
USART_RX_STA=0;
memset(USART_RX_BUF,0x00,sizeof (USART_RX_BUF));
}
}
else
{
USART_RX_STA=0;
memset(USART_RX_BUF,0x00,sizeof(USART_RX_BUF));
HAL_UART_Transmit(&huart1,(uint8_t *)"数据已满",10,0xFFFF);
}
HAL_UART_Receive_IT(&huart1 ,(uint8_t *)&aRxBuffer ,1);
}
}
/* USER CODE END 1 */
3.在usart.h文件中加入
/* USER CODE BEGIN Includes */
#define USART_REC_LEN 5000 //接收的数据范围
extern char USART_RX_BUF[USART_REC_LEN];
extern uint8_t aRxBuffer;
extern uint16_t USART_RX_STA;
/* USER CODE END Includes */
4.新建一个cmd.c文件,创建命令check函数
/**********************************
*函数:USART1_Check(char *cmd)
*输入参数:命令字符串
*返回值:无
**********************************/
void USART1_Check(char *cmd)
{
if(strcasecmp("LED OFF",cmd)==0)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
}
if(strcasecmp("LED ON",cmd)==0)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
}
}
/****************END OF FILE************/
5.在mian函数中的while(1)循环中调用USART1_Check(USART_RX_BUF)函数
6.最后串口初始化函数后打开串口中断函数
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 *
HAL_UART_Receive_IT(&huart1 ,(uint8_t *)&aRxBuffer ,1);
printf("Int is ok!\r\n");
/* USER CODE END 2 */
注意:还要在keil中勾选
文章来源:https://www.toymoban.com/news/detail-596483.html
配置好了就可以进行串口收发数据了,并且可以通过串口助手来控制单片机LED灯亮灭文章来源地址https://www.toymoban.com/news/detail-596483.html
到了这里,关于HAL库STM32CUBEMX学习记录(一)——USART(串口中断收发数据)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!