[开发生态] 【SWDM-QFP100-34SVEA3测评】二:通过串口熟悉SWM341的库开发

[复制链接]
 楼主| 数码小叶 发表于 2023-4-5 14:40 | 显示全部楼层 |阅读模式
<
本帖最后由 数码小叶 于 2023-4-5 14:39 编辑

在华芯微特的官网资料里-‘库函数&例程’,可以下到一个SWM341_Lib,解压后每个模块的工程文件,可以直接用keil打开。
2023-04-02_16-23-32.png
遗憾的是在库中没有找到API的帮助文档,因此只能通过例程来熟悉了。
串口的初始化函数

  1.         UART_InitStructure UART_initStruct;
  2.         
  3.         PORT_Init(PORTM, PIN0, PORTM_PIN0_UART0_RX, 1);
  4.         PORT_Init(PORTM, PIN1, PORTM_PIN1_UART0_TX, 0);
  5.          
  6.          UART_initStruct.Baudrate = 115200;
  7.         UART_initStruct.DataBits = UART_DATA_8BIT;
  8.         UART_initStruct.Parity = UART_PARITY_NONE;
  9.         UART_initStruct.StopBits = UART_STOP_1BIT;
  10.         UART_initStruct.RXThreshold = 3;
  11.         UART_initStruct.RXThresholdIEn = 0;
  12.         UART_initStruct.TXThreshold = 3;
  13.         UART_initStruct.TXThresholdIEn = 0;
  14.         UART_initStruct.TimeoutTime = 10;
  15.         UART_initStruct.TimeoutIEn = 0;
  16.          UART_Init(UART0, &UART_initStruct);
  17.         UART_Open(UART0);
从串口的初始化操作中可以看出来,底层寄存器已经封装好成库函数了和宏定义了,方便调用
尤其是PORT_Init函数,即使一次用,也很直观明白


2023-04-05_10-43-31.png

华芯微特已经在库里把每个管脚的功能已经全部定义出来了,调用时显得更加简单明了,几乎不用去查看datesheet了,只需要查看SWM341_port.h文件。
2023-04-05_14-33-55.png
相比配置PORTx_SEL0/PORTx_SEL1,省了很多事。


同样,串口的初始化结构体UART_InitStructure定义也很直观明了,都有注释,看了一些其他的结构体定义,同样如此
  1. typedef struct {
  2.         uint32_t Baudrate;
  3.         uint8_t  DataBits;                        //数据位位数,可取值UART_DATA_8BIT、UART_DATA_9BIT
  4.         uint8_t  Parity;                        //奇偶校验位,可取值UART_PARITY_NONE、UART_PARITY_ODD、UART_PARITY_EVEN、UART_PARITY_ONE、                                                             UART_PARITY_ZERO
  5.         uint8_t  StopBits;                        //停止位位数,可取值UART_STOP_1BIT、UART_STOP_2BIT
  6.         uint8_t  RXThreshold;                //取值0--7
  7.         uint8_t  RXThresholdIEn;        //当RX FIFO中数据个数 >  RXThreshold时触发中断
  8.         uint8_t  TXThreshold;                //取值0--7
  9.         uint8_t  TXThresholdIEn;        //当TX FIFO中数据个数 <= TXThreshold时触发中断
  10.         uint8_t  TimeoutTime;                //超时时长 = TimeoutTime/(Baudrate/10) 秒
  11.         uint8_t  TimeoutIEn;                //超时中断,超过 TimeoutTime/(Baudrate/10) 秒没有在RX线上接收到数据时触发中断
  12. } UART_InitStructure;


最后是printf重定向,直接调用串口打印

  1. int fputc(int ch, FILE *f)
  2. {
  3.         UART_WriteByte(UART0, ch);
  4.         while(UART_IsTXBusy(UART0));        
  5.         return ch;
  6. }


通过SWDM-QFP100-34SVEA3的原理图,可以发现,CH340C的串口出来后,RX和TX没有和板子的其他部分连接,而是引出了两个排针位置Tx/Rx
2023-04-05_11-43-05.png

2023-04-05_11-41-42.png


为了和库例程保持一致,使用UART0,因此用杜板线把TX\RX 和 M0\M1引脚连接起来。
微信图片_20230405113811.jpg


打开串口助手,成功输出数据,串口工作ok
2023-04-05_13-08-43.png



在看库函数操作时,发现一个不同于一般库操作的地方
  1. GPIO_initStruct.func = 0;                                        //引脚功能为GPIO
  2. GPIO_initStruct.dir = 1;                                        //输出
  3. GPIO_initStruct.pull_up = 0;
  4. GPIO_initStruct.pull_down = 0;
  5. GPIO_initStruct.open_drain = 0;
  6. GPIO_Init(GPIOA,PIN_2,&GPIO_initStruct);        //GPIOA.2初始化为输出引脚,无上拉、无下拉、非开漏
上拉、下拉、开漏居然是每个都有一个配置??
在GPIO_Init函数里是具体的赋值操作
  1. if(pull_up == 1)     PORTx->PULLU |=  (1 << n);
  2. else                 PORTx->PULLU &= ~(1 << n);
  3. if(pull_down == 1)   PORTx->PULLD |=  (1 << n);
  4. else                 PORTx->PULLD &= ~(1 << n);
  5. if(open_drain == 1)  PORTx->OPEND |=  (1 << n);
  6. else                 PORTx->OPEND &= ~(1 << n);


果然也是并列关系,万一管脚很多或者某些原因,发生了错误的配置,不知道三个中哪一个会起效果。

综合体验下来,SWM341的库写的还是很通俗易用,方便新手上手。
i1mcu 发表于 2023-4-8 20:47 | 显示全部楼层
这个串口是不是可以重映射呢              
updownq 发表于 2023-4-8 21:05 | 显示全部楼层
可以移植printf过来了。              
mnynt121 发表于 2023-4-8 21:36 | 显示全部楼层
SWM341的性能怎么样              
geraldbetty 发表于 2023-4-8 21:47 | 显示全部楼层
SWM341_Lib是什么呢              
saservice 发表于 2023-4-8 22:03 | 显示全部楼层
SWM341有多少个串口的              
nomomy 发表于 2023-4-8 22:24 | 显示全部楼层
串口最大支持多大的波特率呢              
houjiakai 发表于 2023-4-9 14:23 | 显示全部楼层
官网的提供的开发板吗              
 楼主| 数码小叶 发表于 2023-4-9 20:14 | 显示全部楼层
saservice 发表于 2023-4-8 22:03
SWM341有多少个串口的

4个
 楼主| 数码小叶 发表于 2023-4-9 20:15 | 显示全部楼层
nomomy 发表于 2023-4-8 22:24
串口最大支持多大的波特率呢

理论上是系统时钟的十六分频
 楼主| 数码小叶 发表于 2023-4-9 20:15 | 显示全部楼层
houjiakai 发表于 2023-4-9 14:23
官网的提供的开发板吗

论坛的活动
华芯微特FAE 发表于 2023-4-10 09:39 | 显示全部楼层

是我司的基础库
华芯微特FAE 发表于 2023-4-10 09:58 | 显示全部楼层
nomomy 发表于 2023-4-8 22:24
串口最大支持多大的波特率呢

最大可支持1M
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

2560

帖子

19

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