[活动] 【APM32M3514开发板测评】+串口通讯的实现

[复制链接]
1062|2
 楼主| jinglixixi 发表于 2025-2-1 20:28 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2025-2-1 20:31 编辑

在前面曾介绍过,例程中对串口的配置是无效的,因此要实现串口通讯必须自行配置。
鉴于引脚资源的出借情况,这里选取PC4和PC5来供串口1所用。
d9359443db7f83ac911be213b34db49a
图1 所用引脚
对串口进行配置的函数为:
  1. void APM_MINI_COMInit(COM_T COM)
  2. {
  3.     GPIO_Config_T gpioConfig;
  4.     USART_Config_T usartConfigStruct;
  5.     RCM_EnableAHBPeriphClock(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM]);
  6.     if (COM == COM1)
  7.     {
  8.         RCM_EnableAPB2PeriphClock(COM_USART_CLK[COM]);
  9.     }
  10.     else
  11.     {
  12.         RCM_EnableAPB1PeriphClock(COM_USART_CLK[COM]);
  13.     }
  14.     GPIO_ConfigPinAF(COM_TX_PORT[COM], COM_TX_PIN_SOURCE[COM], COM_TX_AF[COM]);
  15.     GPIO_ConfigPinAF(COM_RX_PORT[COM], COM_RX_PIN_SOURCE[COM], COM_RX_AF[COM]);
  16.     gpioConfig.mode = GPIO_MODE_AF;
  17.     gpioConfig.pin = COM_TX_PIN[COM];
  18.     gpioConfig.speed = GPIO_SPEED_50MHz;
  19.     gpioConfig.outtype = GPIO_OUT_TYPE_PP;
  20.     gpioConfig.pupd = GPIO_PUPD_PU;
  21.     GPIO_Config(COM_TX_PORT[COM], &gpioConfig);
  22.     gpioConfig.pin = COM_RX_PIN[COM];
  23.     GPIO_Config(COM_RX_PORT[COM], &gpioConfig);
  24.     usartConfigStruct.baudRate = 115200;
  25.     usartConfigStruct.mode     = USART_MODE_TX_RX;
  26.     usartConfigStruct.hardwareFlowCtrl = USART_FLOW_CTRL_NONE;
  27.     usartConfigStruct.parity   = USART_PARITY_NONE;
  28.     usartConfigStruct.stopBits =  USART_STOP_BIT_1;
  29.     usartConfigStruct.wordLength = USART_WORD_LEN_8B;
  30.     USART_Config(COM_USART[COM], &usartConfigStruct);
  31.     USART_EnableInterrupt(COM_USART[COM], USART_INT_RXBNEIE);
  32.     if (COM_USART[COM] == USART1)
  33.     {
  34.         NVIC_EnableIRQRequest(USART1_IRQn, 2);
  35.     }
  36.     else if (COM_USART[COM] == USART2)
  37.     {
  38.         NVIC_EnableIRQRequest(USART2_IRQn, 3);
  39.     }
  40.     USART_Enable(COM_USART[COM]);
  41. }

以中断方式接收数据的函数为:
  1. void  USART_Receive_Isr(void)
  2. {
  3.     uint8_t dat;
  4.     if (USART_ReadStatusFlag(MINI_COM1, USART_FLAG_RXBNE) == SET)
  5.     {
  6.         dat = (uint8_t)USART_RxData(MINI_COM1);
  7.         printf("%c", dat);
  8.     }
  9. }

以中断方式发送信息的函数为:
  1. void USART_Send_Isr(void)
  2. {
  3.     while (USART_ReadStatusFlag(MINI_COM1, USART_FLAG_TXBE) == RESET);
  4.     if (USART_ReadStatusFlag(MINI_COM1, USART_FLAG_TXC))
  5.     {
  6.         printf("APM MINI BOARD SEND FINISHED\r\n\r\n");
  7.         USART_ClearStatusFlag(MINI_COM1, USART_FLAG_TXC);
  8.     }
  9. }

进行串口测试的主程序为:
  1. int main(void)
  2. {
  3.     GPIO_Config_T gpioConfig;
  4.     USART_Config_T usartConfig;
  5.     APM_MINI_COMInit(COM1);
  6.     RCM_EnableAHBPeriphClock(MINI_COM1_TX_GPIO_CLK | MINI_COM2_TX_GPIO_CLK);
  7.     RCM_EnableAPB2PeriphClock(MINI_COM1_CLK);
  8.     GPIO_ConfigPinAF(MINI_COM1_TX_GPIO_PORT, MINI_COM1_TX_SOURCE, MINI_COM1_TX_AF);
  9.     GPIO_ConfigPinAF(MINI_COM1_RX_GPIO_PORT, MINI_COM1_RX_SOURCE, MINI_COM1_RX_AF);
  10.     gpioConfig.mode = GPIO_MODE_AF;
  11.     gpioConfig.pin = MINI_COM1_TX_PIN;
  12.     gpioConfig.speed = GPIO_SPEED_50MHz;
  13.     gpioConfig.outtype = GPIO_OUT_TYPE_PP;
  14.     gpioConfig.pupd = GPIO_PUPD_PU;
  15.     GPIO_Config(MINI_COM1_TX_GPIO_PORT, &gpioConfig);
  16.     gpioConfig.pin  = MINI_COM1_RX_PIN;
  17.     GPIO_Config(MINI_COM1_RX_GPIO_PORT, &gpioConfig);
  18.     usartConfig.baudRate = 115200;
  19.     usartConfig.mode = USART_MODE_TX_RX;
  20.     usartConfig.hardwareFlowCtrl = USART_FLOW_CTRL_NONE;
  21.     usartConfig.parity = USART_PARITY_NONE;
  22.     usartConfig.stopBits = USART_STOP_BIT_1;
  23.     usartConfig.wordLength = USART_WORD_LEN_8B;
  24.     USART_Config(MINI_COM1, &usartConfig);
  25.     USART_EnableInterrupt(MINI_COM1, USART_INT_RXBNEIE);
  26.     NVIC_EnableIRQRequest(MINI_COM1_IRQn, 2);
  27.     USART_Enable(MINI_COM1);
  28.     USART_Write(MINI_COM1, (uint8_t*)"HELLO APM MINI BOARD\r\n");
  29.     while (1)
  30.     {
  31.     }
  32. }

经程序的 编译与下载,其运行结果如图2所示。
fe14f8da14dc9121269a3e969601d376
图2 测试效果



可怜的小弗朗士 发表于 2025-2-14 10:19 | 显示全部楼层
例程都有问题吧,不会吧
 楼主| jinglixixi 发表于 2025-2-14 13:49 | 显示全部楼层
可怜的小弗朗士 发表于 2025-2-14 10:19
例程都有问题吧,不会吧

并不少见呀!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部