打印
[开发生态]

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

[复制链接]
1033|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 数码小叶 于 2023-4-5 14:39 编辑

在华芯微特的官网资料里-‘库函数&例程’,可以下到一个SWM341_Lib,解压后每个模块的工程文件,可以直接用keil打开。

遗憾的是在库中没有找到API的帮助文档,因此只能通过例程来熟悉了。
串口的初始化函数

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




华芯微特已经在库里把每个管脚的功能已经全部定义出来了,调用时显得更加简单明了,几乎不用去查看datesheet了,只需要查看SWM341_port.h文件。

相比配置PORTx_SEL0/PORTx_SEL1,省了很多事。


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


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

int fputc(int ch, FILE *f)
{
        UART_WriteByte(UART0, ch);
        while(UART_IsTXBusy(UART0));        
        return ch;
}


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





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



打开串口助手,成功输出数据,串口工作ok




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

使用特权

评论回复
5
geraldbetty| | 2023-4-8 21:47 | 只看该作者
SWM341_Lib是什么呢              

使用特权

评论回复
6
saservice| | 2023-4-8 22:03 | 只看该作者
SWM341有多少个串口的              

使用特权

评论回复
7
nomomy| | 2023-4-8 22:24 | 只看该作者
串口最大支持多大的波特率呢              

使用特权

评论回复
8
houjiakai| | 2023-4-9 14:23 | 只看该作者
官网的提供的开发板吗              

使用特权

评论回复
9
数码小叶|  楼主 | 2023-4-9 20:14 | 只看该作者
saservice 发表于 2023-4-8 22:03
SWM341有多少个串口的

4个

使用特权

评论回复
10
数码小叶|  楼主 | 2023-4-9 20:15 | 只看该作者
nomomy 发表于 2023-4-8 22:24
串口最大支持多大的波特率呢

理论上是系统时钟的十六分频

使用特权

评论回复
11
数码小叶|  楼主 | 2023-4-9 20:15 | 只看该作者
houjiakai 发表于 2023-4-9 14:23
官网的提供的开发板吗

论坛的活动

使用特权

评论回复
12
华芯微特FAE| | 2023-4-10 09:39 | 只看该作者

是我司的基础库

使用特权

评论回复
13
华芯微特FAE| | 2023-4-10 09:58 | 只看该作者
nomomy 发表于 2023-4-8 22:24
串口最大支持多大的波特率呢

最大可支持1M

使用特权

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

本版积分规则

103

主题

2540

帖子

19

粉丝