HAL库中断方式进行串口通信
使用STM32CubeMX创建工程:
- 打开STM32CubeMX,选择你的目标STM32微控制器型号,然后进入项目。
-
在"Pinout & Configuration"选项卡中,开始如下配置:
点击A->Z,选择SYS,在Debug一栏选择Serial Wire
选择RCC,如下:
- 在"Clock Configuration"选项卡中,设置如下:
-
在"Project Manager"选项卡中,按如下配置:
Project填好项目名称,然后在Toolchain/IDE选择MDK-ARM
Code Generator界面:
- 最后,点击GENERATE CODE,生成后直接点击打开项目
二、通过KEil配置代码
1.打开项目,定义全局变量
char c;
char message[]="hello Windows\n";
char tips[]="CommandError\n";
char tips1[]="Start.....\n";
char tips2[]="Stop......\n";
int flag=0;
2.找到main函数,设置中断和在while里面添加代码
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();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
//设置接受中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);
while (1)
{
/* USER CODE END WHILE */
if(flag==1){
//发送信息
HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF);
//延时
HAL_Delay(1000);
}
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
- 重载HAL_UART_RxCpltCallback函数,将下面函数放在main函数后面就行
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//当输入的指令为0时,发送提示并改变flag
if(c=='0'){
flag=0;
HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF);
}
//当输入的指令为1时,发送提示并改变flag
else if(c=='1'){
flag=1;
HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF);
}
//当输入不存在指令时,发送提示并改变flag
else {
flag=0;
HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF);
}
//重新设置中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);
}
- 编译,然后生成hex文件。
三、烧录
- 烧录
2.串口调试