在工業(yè)控制、智能家電、電機(jī)驅(qū)動等應(yīng)用場景中,微控制器與外部設(shè)備之間的通信速率直接影響系統(tǒng)響應(yīng)速度與整體性能。極海半導(dǎo)體APM32E030系列MCU,其內(nèi)置的USART(通用同步異步收發(fā)傳輸器)外設(shè)支持最高每秒6兆比特(6Mbps)的通信速率,這一特性為高實(shí)時性要求的應(yīng)用提供了可靠的硬件基礎(chǔ)。
6Mbps的傳輸速度,意味著APM32E030能夠在單位時間內(nèi)處理更多數(shù)據(jù),特別適合以下場景:
工業(yè)傳感器與執(zhí)行器:在產(chǎn)線控制與數(shù)據(jù)采集中實(shí)現(xiàn)快速信號交互,提升系統(tǒng)響應(yīng)實(shí)時性;
智能家電控制:支持與變頻模塊、顯示驅(qū)動或另一MCU之間進(jìn)行高效數(shù)據(jù)交換;
電機(jī)驅(qū)動系統(tǒng):在多電機(jī)協(xié)同或參數(shù)實(shí)時調(diào)試過程中,確保控制指令快速、準(zhǔn)確送達(dá)。
除了高傳輸速率,APM32E030的USART模塊在設(shè)計(jì)與實(shí)際應(yīng)用中還表現(xiàn)出以下特點(diǎn):
高穩(wěn)定性與抗干擾能力
即使在復(fù)雜電磁環(huán)境下運(yùn)行,其USART接口仍能保持穩(wěn)定通信,有效降低誤碼率,保障數(shù)據(jù)傳輸?shù)目煽啃浴?/span>
低功耗運(yùn)行
芯片在高速通信時仍能維持較低的功耗,有助于滿足電池供電或?qū)δ苄б髧?yán)格的設(shè)備需求。
易于集成與開發(fā)
該USART外設(shè)與常見通信協(xié)議兼容,工程師可以便捷地將其接入現(xiàn)有系統(tǒng),縮短產(chǎn)品開發(fā)周期。
極海APM32E030 USART驅(qū)動代碼如下:
極海APM32E030 USART驅(qū)動代碼如下:
/* 串口 */
#define UART_INS (USART1)
/* 接收數(shù)據(jù)大小 */
#define UART_RX_LEN (512)
/* 接收緩存 */
uint8_t rx_buf[UART_RX_LEN];
/* 接收長度 */
uint16_t rx_len;
/* 接收完成 */
uint16_t rx_complete;
/* 發(fā)送索引 */
uint16_t tx_index;
/* 發(fā)送長度 */
uint16_t tx_len;
/* 發(fā)送緩存 */
uint8_t *tx_buf;
/*
* @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);
/* 關(guān)閉發(fā)送為空中斷 */
USART_DisableInterrupt(UART_INS, USART_INT_TXBEIE);
/* 使能接收非空中斷 */
USART_EnableInterrupt(UART_INS, USART_INT_RXBNEIE);
/* 使能空閑中斷 */
USART_EnableInterrupt(UART_INS, USART_INT_IDLEIE);
/* 使能中斷 */
NVIC_SetPriority(USART1_IRQn, 0);
NVIC_EnableIRQ(USART1_IRQn);
/* 使能串口 */
USART_Enable(UART_INS);
}
/*
* @brief 串口中斷
*
* @param None
*
* @retval None
*
*/
void USART1_IRQHandler(void)
{
/* 發(fā)送為空 */
if (USART_ReadIntFlag(UART_INS, USART_INT_FLAG_TXBE) != RESET) {
if (tx_index < tx_len) {
/* 發(fā)數(shù)據(jù) */
USART_TxData(UART_INS, tx_buf[tx_index++]);
} else {
/* 關(guān)閉發(fā)送 */
USART_DisableInterrupt(UART_INS, USART_INT_TXBEIE);
}
}
/* 接收非空 */
if (USART_ReadIntFlag(UART_INS, USART_INT_FLAG_RXBNE) != RESET) {
rx_buf[rx_len++] = USART_RxData(UART_INS);
}
/* 空閑 */
if (USART_ReadIntFlag(UART_INS, USART_INT_FLAG_IDLE) != RESET) {
USART_ClearIntFlag(UART_INS, USART_INT_FLAG_IDLE);
rx_complete = 1;
}
}
/*
* @brief 發(fā)送數(shù)據(jù)
*
* @param buf: 數(shù)據(jù)緩存
* buf_len: 緩存大小
*
* @retval None
*
*/
void bsp_uart_send(uint8_t *buf, uint16_t buf_len)
{
if ((buf != NULL) && (buf_len > 0)) {
tx_buf = buf;
tx_index = 0;
tx_len = buf_len;
/* 開啟發(fā)送為空中斷 */
USART_EnableInterrupt(UART_INS, USART_INT_TXBEIE);
}
}
/*
* @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 接收數(shù)據(jù)長度
*
*/
uint16_t bsp_get_rx_len(void)
{
uint16_t ret = rx_len;
rx_len = 0;
return ret;
}
測試代碼如下:
// 應(yīng)用初始化
void app_init(void)
{
bsp_uart_init();
}
// 應(yīng)用任務(wù)
void app_task(void)
{
/* 接收完成再發(fā)出來 */
if (bsp_is_rx_complete() != 0) {
bsp_uart_send(bsp_get_rx_buf(), bsp_get_rx_len());
}
}
綜上所述,極海APM32E030的USART外設(shè)不僅提供了6Mbps這一出色的硬件傳輸速度,更在穩(wěn)定性、功耗和易用性方面做了充分優(yōu)化。它使得開發(fā)者在面對需要高速、可靠串行通信的應(yīng)用時,多了一個性能扎實(shí)、極具性價比的國產(chǎn)MCU選擇。
