一、首先使用STM32CUBEMX新建一個(gè)工程
二、打開(kāi)工程文件
1.在usart.c中添加以下代碼
/* USER CODE BEGIN 0 */
#include "stdio.h"
#include "string.h"
uint8_t aRxBuffer;//數(shù)據(jù)緩存
char USART_RX_BUF[USART_REC_LEN];//接收到的數(shù)據(jù)
uint16_t USART_RX_STA;//接收標(biāo)志位
//printf函數(shù)重定向
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.然后在最后面加入中斷回調(diào)函數(shù)
/* 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 *)"數(shù)據(jù)已滿",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 //接收的數(shù)據(jù)范圍
extern char USART_RX_BUF[USART_REC_LEN];
extern uint8_t aRxBuffer;
extern uint16_t USART_RX_STA;
/* USER CODE END Includes */
?4.新建一個(gè)cmd.c文件,創(chuàng)建命令check函數(shù)
/**********************************
*函數(shù):USART1_Check(char *cmd)
*輸入?yún)?shù):命令字符串
*返回值:無(wú)
**********************************/
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函數(shù)中的while(1)循環(huán)中調(diào)用USART1_Check(USART_RX_BUF)函數(shù)
6.最后串口初始化函數(shù)后打開(kāi)串口中斷函數(shù)
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中勾選
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-596483.html
配置好了就可以進(jìn)行串口收發(fā)數(shù)據(jù)了,并且可以通過(guò)串口助手來(lái)控制單片機(jī)LED燈亮滅文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-596483.html
到了這里,關(guān)于HAL庫(kù)STM32CUBEMX學(xué)習(xí)記錄(一)——USART(串口中斷收發(fā)數(shù)據(jù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!