打印
[APM32F0]

APM32F003X6 3个串口配置代码-附带中断/printf

[复制链接]
1444|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tiangengqiu|  楼主 | 2023-7-30 23:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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)


使用特权

评论回复
沙发
sheflynn| | 2023-8-4 15:16 | 只看该作者
如何启动串口中断              

使用特权

评论回复
板凳
lihuami| | 2023-8-4 15:34 | 只看该作者
通过printf函数打印的数据怎么查看?

使用特权

评论回复
地板
hearstnorman323| | 2023-8-4 15:53 | 只看该作者
串口printf重定向,fputc函数不是发送一个字节吗?

使用特权

评论回复
5
deliahouse887| | 2023-8-4 16:10 | 只看该作者
可以使用标准库函数中的printf()来进行串口打印输出。

使用特权

评论回复
6
1988020566| | 2023-8-4 16:19 | 只看该作者
在使用printf()函数之前,确保已经正确初始化了USART外设以及相关的GPIO引脚。

使用特权

评论回复
7
belindagraham| | 2023-8-4 16:28 | 只看该作者
APM32F003X6   printf速度慢

使用特权

评论回复
8
jonas222| | 2023-8-4 16:38 | 只看该作者
使用printf()函数进行打印输出可以方便地在调试过程中查看变量的值、输出调试信息等

使用特权

评论回复
9
uptown| | 2023-8-4 16:46 | 只看该作者
可以使用标准的printf函数来输出数据。

使用特权

评论回复
10
elsaflower| | 2023-8-4 16:56 | 只看该作者
使用printf函数的一种常见方法是使用串行通信接口

使用特权

评论回复
11
bestwell| | 2023-8-4 17:13 | 只看该作者
怎么配置串口的接收中断               

使用特权

评论回复
12
uiint| | 2023-8-4 17:23 | 只看该作者
库通常会提供一些函数来处理标准输入输出流,例如打开标准输出流、写入标准输出流、读取标准输入流等。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

12

帖子

1

粉丝