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

在华芯微特的官网资料里-‘库函数&例程’,可以下到一个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的库写的还是很通俗易用,方便新手上手。
---------------------
作者:数码小叶
链接:https://bbs.21ic.com/icview-3294502-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值