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

[复制链接]
2490|12
 楼主| tiangengqiu 发表于 2023-7-30 23:23 | 显示全部楼层 |阅读模式
本帖最后由 tiangengqiu 于 2023-7-30 23:24 编辑

APM32F003系列拥有丰富的3个串口,是个性价比很高的32位单片机,可外接多个串口模块,进行快速方案验证及其落地量产,广泛应用于各个领域,无主机倒车雷达,扫地机器人惯导模组,气体检测传感器,智能马桶盖配件板,按摩仪,智能饮水器龙头设备等等..得到广大市场认可,可硬件管脚sxx8s003x6系列产品。以下是APM32F003系列的3个Uart 收发的示例配置代码:
初始化串口
  1. void USART1Init(void)
  2. {
  3.     USART_Config_T usartConfig;
  4.    
  5.     /**  BaudRate is 9600 */
  6.     usartConfig.baudRate = 115200;
  7.     /**  No interrupt */
  8.     usartConfig.interrupt = USART_INT_RX;
  9.     /**  Enable receiver */
  10.     usartConfig.mode = USART_MODE_TX_RX;
  11.     /**  Parity disable */
  12.     usartConfig.parity = USART_PARITY_NONE;
  13.     /**  One stop bit */
  14.     usartConfig.stopBits = USART_STOP_BIT_1;
  15.     /**  Word length is 8bit */
  16.     usartConfig.wordLength = USART_WORD_LEN_8B;
  17.         
  18.           USART_Config(USART1, &usartConfig);
  19.         
  20.           USART_Enable(USART1);
  21.         
  22.         
  23.     /**  Enable USART1 Receiver IRQ request */
  24.     NVIC_EnableIRQRequest(USART1_RX_IRQn, 0x01);
  25. }
  26. /*!
  27. * [url=home.php?mod=space&uid=247401]@brief[/url]       USART Init   
  28. *
  29. * @param       None
  30. *
  31. * @retval      None
  32. *
  33. * @note
  34. */
  35. void USART2Init(void)
  36. {
  37.     USART_Config_T usartConfig;
  38.    
  39.     /**  BaudRate is 9600 */
  40.     usartConfig.baudRate = 115200;
  41.     /**  No interrupt */
  42.     usartConfig.interrupt = USART_INT_RX;
  43.     /**  Enable receiver */
  44.     usartConfig.mode = USART_MODE_TX_RX;
  45.     /**  Parity disable */
  46.     usartConfig.parity = USART_PARITY_NONE;
  47.     /**  One stop bit */
  48.     usartConfig.stopBits = USART_STOP_BIT_1;
  49.     /**  Word length is 8bit */
  50.     usartConfig.wordLength = USART_WORD_LEN_8B;
  51.         
  52.           USART_Config(USART2, &usartConfig);
  53.         
  54.           USART_Enable(USART2);
  55.         
  56.         
  57.     /**  Enable USART2 Receiver IRQ request */
  58.     NVIC_EnableIRQRequest(USART2_RX_IRQn, 0x01);
  59. }
  60. void USART3Init(void)
  61. {
  62.     USART_Config_T usartConfig;
  63.    
  64.     /**  BaudRate is 9600 */
  65.     usartConfig.baudRate = 115200;
  66.     /**  No interrupt */
  67.     usartConfig.interrupt = USART_INT_RX;
  68.     /**  Enable receiver */
  69.     usartConfig.mode = USART_MODE_TX_RX;
  70.     /**  Parity disable */
  71.     usartConfig.parity = USART_PARITY_NONE;
  72.     /**  One stop bit */
  73.     usartConfig.stopBits = USART_STOP_BIT_1;
  74.     /**  Word length is 8bit */
  75.     usartConfig.wordLength = USART_WORD_LEN_8B;
  76.         
  77.           USART_Config(USART3, &usartConfig);
  78.         
  79.           USART_Enable(USART3);
  80.         
  81.         
  82.     /**  Enable USART3 Receiver IRQ request */
  83.     NVIC_EnableIRQRequest(USART3_RX_IRQn, 0x01);
  84. }
中断接收处理
  1. void USART1RxIsr(void)
  2. {
  3.                 uint8_t Res;
  4.     if(USART_ReadIntFlag(USART1, USART_INT_FLAG_RX) == SET)
  5.     {
  6.                         Res=USART_RxData8(USART1);
  7.                         USART_TxData8(USART1, Res);
  8.                 }
  9. }
  10. void USART2RxIsr(void)
  11. {
  12.                 uint8_t Res;
  13.     if(USART_ReadIntFlag(USART2, USART_INT_FLAG_RX) == SET)
  14.     {
  15.                         Res=USART_RxData8(USART2);
  16.                         USART_TxData8(USART2, Res);
  17.                 }
  18. }
  19. void USART3RxIsr(void)
  20. {
  21.                 uint8_t Res;
  22.     if(USART_ReadIntFlag(USART3, USART_INT_FLAG_RX) == SET)
  23.     {
  24.                         Res=USART_RxData8(USART3);
  25.                         USART_TxData8(USART3, Res);
  26.                 }
  27. }


若需要增加printf打印,需要进行重定向
1、工程配置

2、重定向
  1. ①、添加头文件  #include "stdio.h"


特殊串口使用注意事项
由于uart2 与烧录swd接口冲突,使用前需要进行失能SWD接口功能

  1. //示例代码

  2. GPIO_DisableJTAG();
  3. USART2Init();





uart3串口IO内部没有内部上拉,使用时需要硬件设计需要加上外部上拉,否则数据手法出现乱码



003-uart.rar (1.64 MB, 下载次数: 43)


sheflynn 发表于 2023-8-4 15:16 | 显示全部楼层
如何启动串口中断              
lihuami 发表于 2023-8-4 15:34 | 显示全部楼层
通过printf函数打印的数据怎么查看?
hearstnorman323 发表于 2023-8-4 15:53 | 显示全部楼层
串口printf重定向,fputc函数不是发送一个字节吗?
deliahouse887 发表于 2023-8-4 16:10 | 显示全部楼层
可以使用标准库函数中的printf()来进行串口打印输出。
1988020566 发表于 2023-8-4 16:19 | 显示全部楼层
在使用printf()函数之前,确保已经正确初始化了USART外设以及相关的GPIO引脚。
belindagraham 发表于 2023-8-4 16:28 | 显示全部楼层
APM32F003X6   printf速度慢
jonas222 发表于 2023-8-4 16:38 | 显示全部楼层
使用printf()函数进行打印输出可以方便地在调试过程中查看变量的值、输出调试信息等
uptown 发表于 2023-8-4 16:46 | 显示全部楼层
可以使用标准的printf函数来输出数据。
elsaflower 发表于 2023-8-4 16:56 | 显示全部楼层
使用printf函数的一种常见方法是使用串行通信接口
bestwell 发表于 2023-8-4 17:13 | 显示全部楼层
怎么配置串口的接收中断               
uiint 发表于 2023-8-4 17:23 | 显示全部楼层
库通常会提供一些函数来处理标准输入输出流,例如打开标准输出流、写入标准输出流、读取标准输入流等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

12

帖子

1

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