本帖最后由 dami 于 2021-3-29 09:46 编辑
【STM32G4评测+01+MDK+Stm32cube实现多串口】
1,打开Stm32cube,升级到最新的6.20(吃硬盘)。
2,配置板子为nucleo-STM32G491RE。
3,配置串口3,4,(因为是选的板子所以串口一默认打开的,ld2也是配置好了的)。
设置为接收中断,发送不中断。波特率115200.
4,生成代码。
5,用mdk打开。
6,工程中startup_stm32g491xx.s没加上所以编译有错。加上。
7,实验目标:串口3,4,定时发送数据,串口3,4收到数据都送到串口1 把串口3或者4的RX和TX连起来就可以通过串口1看到CPU发送的数据了。
8,增加接收处理语句。
//main.c 前面加
uint8_t uart3sv[4],uart4sv[4];
uint8_t uart3buf[100],uart4buf[100];
static uint8_t p_uart3=0,p_uart4=0;
static uint16_t uart3_sent_tim=0,uart4_sent_tim=0;
void delayms(uint32_t x)
{
for(uint32_t i=0;i<x;i++)
{
for(uint32_t j=0;j<50000;j++){};
}
}
//加串口回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART3)
{
uart3buf[0]=uart3sv[0];
HAL_UART_Receive_IT(&huart3,&uart3sv[0],1);
HAL_UART_Transmit(&hlpuart1,uart3buf,1,0xffff);
}
if(huart->Instance == UART4)
{
uart4buf[0]=uart4sv[0];
HAL_UART_Receive_IT(&huart4,&uart4sv[0],1);
HAL_UART_Transmit(&hlpuart1,uart4buf,1,0xffff);
}
}
//main.c的main函数中加
/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart3,&uart3sv[0],1);
HAL_UART_Receive_IT(&huart4,&uart4sv[0],1);
uint8_t buf_T[]={"uart3 uart3 :\n\r"};
uint8_t buf_H[]={"uart4 uart4 :\n\r"};
uint8_t buf1[200];
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
delayms(300);
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
delayms(300);
HAL_UART_Transmit(&huart3,buf_T,sizeof(buf_T),0xffff);
delayms(30);
HAL_UART_Transmit(&huart4,buf_H,sizeof(buf_H),0xffff);
delayms(30);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
9,编译调试。
10,用putty观察串口1输出的数据。
如果连接了串口3的RX,TX 串口1就会打印出 uart3 uart3....
如果连接了串口4的RX,TX 串口1就会打印出 uart4 uart4....
不知道为啥贴不了图片。只好作罢。
STM32G491-uart.rar
(679.91 KB)
------------------------完-----------------------------
|