本帖最后由 tiangengqiu 于 2023-7-30 23:24 编辑
APM32F003系列拥有丰富的3个串口,是个性价比很高的32位单片机,可外接多个串口模块,进行快速方案验证及其落地量产,广泛应用于各个领域,无主机倒车雷达,扫地机器人惯导模组,气体检测传感器,智能马桶盖配件板,按摩仪,智能饮水器龙头设备等等..得到广大市场认可,可硬件管脚sxx8s003x6系列产品。以下是APM32F003系列的3个Uart 收发的示例配置代码:
初始化串口
void USART1Init(void)
{
USART_Config_T usartConfig;
/** BaudRate is 9600 */
usartConfig.baudRate = 115200;
/** No interrupt */
usartConfig.interrupt = USART_INT_RX;
/** Enable receiver */
usartConfig.mode = USART_MODE_TX_RX;
/** Parity disable */
usartConfig.parity = USART_PARITY_NONE;
/** One stop bit */
usartConfig.stopBits = USART_STOP_BIT_1;
/** Word length is 8bit */
usartConfig.wordLength = USART_WORD_LEN_8B;
USART_Config(USART1, &usartConfig);
USART_Enable(USART1);
/** Enable USART1 Receiver IRQ request */
NVIC_EnableIRQRequest(USART1_RX_IRQn, 0x01);
}
/*!
* [url=home.php?mod=space&uid=247401]@brief[/url] USART Init
*
* @param None
*
* @retval None
*
* @note
*/
void USART2Init(void)
{
USART_Config_T usartConfig;
/** BaudRate is 9600 */
usartConfig.baudRate = 115200;
/** No interrupt */
usartConfig.interrupt = USART_INT_RX;
/** Enable receiver */
usartConfig.mode = USART_MODE_TX_RX;
/** Parity disable */
usartConfig.parity = USART_PARITY_NONE;
/** One stop bit */
usartConfig.stopBits = USART_STOP_BIT_1;
/** Word length is 8bit */
usartConfig.wordLength = USART_WORD_LEN_8B;
USART_Config(USART2, &usartConfig);
USART_Enable(USART2);
/** Enable USART2 Receiver IRQ request */
NVIC_EnableIRQRequest(USART2_RX_IRQn, 0x01);
}
void USART3Init(void)
{
USART_Config_T usartConfig;
/** BaudRate is 9600 */
usartConfig.baudRate = 115200;
/** No interrupt */
usartConfig.interrupt = USART_INT_RX;
/** Enable receiver */
usartConfig.mode = USART_MODE_TX_RX;
/** Parity disable */
usartConfig.parity = USART_PARITY_NONE;
/** One stop bit */
usartConfig.stopBits = USART_STOP_BIT_1;
/** Word length is 8bit */
usartConfig.wordLength = USART_WORD_LEN_8B;
USART_Config(USART3, &usartConfig);
USART_Enable(USART3);
/** Enable USART3 Receiver IRQ request */
NVIC_EnableIRQRequest(USART3_RX_IRQn, 0x01);
}
中断接收处理
void USART1RxIsr(void)
{
uint8_t Res;
if(USART_ReadIntFlag(USART1, USART_INT_FLAG_RX) == SET)
{
Res=USART_RxData8(USART1);
USART_TxData8(USART1, Res);
}
}
void USART2RxIsr(void)
{
uint8_t Res;
if(USART_ReadIntFlag(USART2, USART_INT_FLAG_RX) == SET)
{
Res=USART_RxData8(USART2);
USART_TxData8(USART2, Res);
}
}
void USART3RxIsr(void)
{
uint8_t Res;
if(USART_ReadIntFlag(USART3, USART_INT_FLAG_RX) == SET)
{
Res=USART_RxData8(USART3);
USART_TxData8(USART3, Res);
}
}
若需要增加printf打印,需要进行重定向
1、工程配置
2、重定向
①、添加头文件 #include "stdio.h"
特殊串口使用注意事项
由于uart2 与烧录swd接口冲突,使用前需要进行失能SWD接口功能
//示例代码
GPIO_DisableJTAG();
USART2Init();
uart3串口IO内部没有内部上拉,使用时需要硬件设计需要加上外部上拉,否则数据手法出现乱码
003-uart.rar
(1.64 MB)
|