前言
STM32F4Discovery开发板,由于PA9复用成了USB OTG的vbus,线路上有电容,导致不能正常用作UART。
UART1不仅仅适用PA9和PA10,也可以使用PB6,PB7
STM32F4Discovery USART1 PA9不能使用.
环境
硬件
STM32F4Discovery
软件
STM32CubeMX V6.2.1
配置
配置UART1_TX跟UART1_RX口为PB6,PB7
代码
函数说明
发送函数:HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
接收函数:HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
代码实例
if (HAL_UART_Receive(&huart1, rx_buff, sizeof(rx_buff),1000) == HAL_OK)
{
switch(rx_buff[0]){
case 0xA1:
set_voltage(DAC_CHANNEL_1, rx_buff[1]<<8 | rx_buff[2]);
get_voltage(DAC_CHANNEL_1);
HAL_UART_Transmit(&huart1, (uint8_t *)tx_buff, 2, 100);
break;
case 0xA2:
set_voltage(DAC_CHANNEL_2, rx_buff[1]<<8 | rx_buff[2]);
get_voltage(DAC_CHANNEL_2);
HAL_UART_Transmit(&huart1, (uint8_t *)tx_buff, 2, 100);
break;
case 0xB1:
get_voltage(DAC_CHANNEL_1);
HAL_UART_Transmit(&huart1, (uint8_t *)tx_buff, 2, 100);
break;
case 0xB2:
get_voltage(DAC_CHANNEL_2);
HAL_UART_Transmit(&huart1, (uint8_t *)tx_buff, 2, 100);
break;
default:
HAL_UART_Transmit(&huart1, rx_buff, sizeof(rx_buff),100);
break;
}
}
输出结果示例
20210809 追加
STM32G474 UART相关
串口发送16位数据
uint8_t high, low;
high = (uint8_t)data >> 8;
low = (uint8_t)data & 0xFF;
HAL_UART_Transmit(&huart4, (uint8_t *)&high, 1,1000);
HAL_UART_Transmit(&huart4, (uint8_t *)&low, 1,1000);
串口发送32位数据
int32_t MotorEncoder;
uint8_t code[4];
code[0]=(uint8_t)(MotorEncoder>>24);
code[1]=(uint8_t)(MotorEncoder>>18&0xFF);
code[2]=(uint8_t)(MotorEncoder>>12&0xFF);
code[3]=(uint8_t)(MotorEncoder&0xFF);
HAL_UART_Transmit(&huart1 , code, 4, 0xff);
串口接收16位数据
data[2]<<8|data[3];
STM32调试相关
keil 提示 cannot load falsh programming algorithm!