一、串口通讯参数修改
1.直接使用rt配置
按照官方网站尝试着修改了一下串口2的波特率等参数,结果怪自己少添加一个头文件,一直查下面的错误,毫无头绪,然后发现需要包含#include <rtdevice.h>这个头文件,解决问题。
#define SAMPLE_UART_NAME "uart2" /* 串口设备名称 */
static rt_device_t serial; /* 串口设备句柄 */
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 初始化配置参数 */
/* step1:查找串口设备 */
serial = rt_device_find(SAMPLE_UART_NAME);
/* step2:修改串口配置参数 */
config.baud_rate = BAUD_RATE_9600; //修改波特率为 9600
config.data_bits = DATA_BITS_8; //数据位 8
config.stop_bits = STOP_BITS_1; //停止位 1
config.bufsz = 128; //修改缓冲区 buff size 为 128
config.parity = PARITY_NONE; //无奇偶校验位
/* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */
rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);
/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */
rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
按照官方的指导,其实很简单,在串口设备开启前,配置相关参数即可,结果就是因为少包含了#include <rtdevice.h>,出现了error: variable ‘config’ has initializer but incomplete type这样的错误,添加上#include <rtdevice.h>就全步解决了。
2.直接使用HAL库配置
就是因为上面的问题一直没有修改波特率成功,所以就采用最直接的解决方式,在开启open串口设备后调用HAL库重新初始化硬件参数,也是能用的,不方便的地方就是不能配置缓冲区尺寸,只能使用默认尺寸了。
UART_HandleTypeDef huart2;
static void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart2);
}