本帖最后由 聪聪哥哥 于 2024-11-24 08:45 编辑
今天和大家分享一下,学习STM32WB串口通讯的学习过程;一:硬件准备:查看原理图,确定下板载串口引脚接入的具体位置;
二:打开cube软件配置,串口的基本参数:
这里使用的是串口1,将串口的中断使能打开,直接点击“generate code”,底层驱动给你就配置完成了,其他的参数就不需要配置了
代码编写的基本流程:
l首先串口时钟使能,GPIO时钟使能: __HAL_RCC_USART1_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE(); lGPIO端口模式设置: __HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE(); l串口参数初始化:HAL_UART_Init(&huart1) l开启中断并且初始化 HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART1_IRQn); l使能串口: l 编写串口发送函数:重映射PRINTF 函数进行数据的发送或者使用HAL的HAL_UART_Transmit函数进行数据的发送; 三、代码的编写,使用printf函数时候,需要在main.c中添加三个库文件如下所示: /* USER CODE BEGIN PV */
#include "stdio.h"
#include "string.h"
#include "stdint.h"
/* USER CODE END PV */
定义一下输出的字符串信息如下所示: /* USER CODE BEGIN 0 */
const uint8_t OUTPUT_str[] = "Hello STM32! Hello WB09! Hello 21 IC huo dong !\r\n";
/* USER CODE END 0 */
若使用printf输出调试信息时候,我们需要重定义一下串口1的发送函数,如下所示: int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
主要注意的是,我们添加代码时,需要写在用户区,否则使用cube软件生成代码时候,自己写的代码就会被覆盖 主程序代码如下: /* USER CODE END WHILE */
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
/* Insert delay 100 ms */
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2);
/* Insert delay 100 ms */
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);
/* Insert delay 100 ms */
HAL_Delay(100);
// HAL_UART_Transmit(&huart1,OUTPUT_str,sizeof(OUTPUT_str),100);
printf("Hello STM32! Hello WB09! Hello 21 IC huo dong !\r\n");
调试验证: 配置串口的波特率为”115200,校验位、停止位等信息后, 在学习WB09开发板时,注意到当我们使用奇偶校验位时,若使用奇校验或者偶校验时候,我们需要将数据位修改未 9位的方式,否则串口发送数据不正常。 下面是修改为偶校验的方式的调试截图如下: 可以看到在串口接收数据为无校验位时,串口接收数据区显示发送的字节已经不正常了,配置成为偶校验的方式才算正常,在使用STM32的串口通讯时候,要注意一下。
|