本帖最后由 口天土立口 于 2025-9-7 18:33 编辑
APM32E030支持USART外设最高速度可达6Mbit/s.
USART驱动代码如下:
- /* 串口 */
- #define UART_INS (USART1)
- /* 接收数据大小 */
- #define UART_RX_LEN (512)
- /* 接收缓存 */
- uint8_t rx_buf[UART_RX_LEN];
- /* 接收长度 */
- uint16_t rx_len;
- /* 接收完成 */
- uint16_t rx_complete;
- /*
- * @brief 初始化
- *
- * @param None
- *
- * @retval None
- *
- */
- void bsp_uart_init(void)
- {
- GPIO_Config_T gpioConfig;
- USART_Config_T configStruct;
-
- /* GPIO */
- RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOB);
- GPIO_ConfigStructInit(&gpioConfig);
- gpioConfig.pin = GPIO_PIN_6 | GPIO_PIN_7;
- gpioConfig.mode = GPIO_MODE_AF;
- gpioConfig.outtype = GPIO_OUT_TYPE_PP;
- gpioConfig.speed = GPIO_SPEED_50MHz;
- gpioConfig.pupd = GPIO_PUPD_NO;
- GPIO_Config(GPIOB, &gpioConfig);
-
- /* TX */
- GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_6, GPIO_AF_PIN0);
- /* RX */
- GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_7, GPIO_AF_PIN0);
-
- /* USART */
- RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_USART1);
- USART_Reset(UART_INS);
- USART_ConfigStructInit(&configStruct);
- configStruct.baudRate = 115200;
- configStruct.wordLength = USART_WORD_LEN_8B;
- configStruct.stopBits = USART_STOP_BIT_1;
- configStruct.parity = USART_PARITY_NONE ;
- configStruct.mode = USART_MODE_TX_RX;
- configStruct.hardwareFlowCtrl = USART_FLOW_CTRL_NONE;
- USART_Config(UART_INS, &configStruct);
- USART_Enable(UART_INS);
- }
- /*
- * @brief 发送数据
- *
- * @param buf: 数据缓存
- * buf_len: 缓存大小
- *
- * @retval None
- *
- */
- void bsp_uart_send(uint8_t *buf, uint16_t buf_len)
- {
- uint16_t i = 0;
-
- while (i < buf_len) {
- while (USART_ReadStatusFlag(UART_INS, USART_FLAG_TXBE) == RESET);
- USART_TxData(UART_INS, buf[i++]);
- }
- while (USART_ReadStatusFlag(UART_INS, USART_FLAG_TXC) == RESET);
- }
- /*
- * @brief 接收数据
- *
- * @param None
- *
- * @retval None
- *
- */
- void bsp_uart_recv(void)
- {
- /* 接收非空 */
- if (USART_ReadStatusFlag(UART_INS, USART_FLAG_RXBNE) != RESET) {
- rx_buf[rx_len++] = USART_RxData(UART_INS);
- }
- /* 接收空闲则表示一帧报文结束 */
- if (USART_ReadStatusFlag(UART_INS, USART_FLAG_IDLEF) != RESET) {
- rx_complete = 1;
- USART_ClearStatusFlag(UART_INS, USART_FLAG_IDLEF);
- }
- }
- /*
- * @brief 接收完成
- *
- * @param None
- *
- * @retval 0: 未完成; 1: 完成
- *
- */
- uint8_t bsp_is_rx_complete(void)
- {
- uint8_t ret = rx_complete;
-
- rx_complete = 0;
- return ret;
- }
- /*
- * @brief 获取接收长度
- *
- * @param None
- *
- * @retval 接收数据长度
- *
- */
- uint16_t bsp_get_rx_len(void)
- {
- uint16_t ret = rx_len;
-
- rx_len = 0;
- return ret;
- }
- /*
- * @brief 获取接收缓存
- *
- * @param None
- *
- * @retval 接收缓存
- *
- */
- uint8_t *bsp_get_rx_buf(void)
- {
- return rx_buf;
- }
测速代码如下:
- // 应用初始化
- void app_init(void)
- {
- bsp_uart_init();
- }
- // 应用任务
- void app_task(void)
- {
- /* 接收数据 */
- bsp_uart_recv();
- /* 接收完成再发出来 */
- if (bsp_is_rx_complete() != 0) {
- bsp_uart_send(bsp_get_rx_buf(), bsp_get_rx_len());
- }
- }
详细代码,请查看附件!
Poll.zip
(2.07 MB, 下载次数: 0)
|