分享通过复旦微魔方来找到FM33LG048串口3无法发送和接收原因的例子

  • Post author:
  • Post category:其他


今天来分享一个关于开发国产芯片(复旦微FM33LG048)串口3时候遇到一个无法发送和接收原因,通过使用官网的图形配置工具来成功解决问题的案例。

具体情况是这样的,该芯片官网有提供相应的keil参考例子,因为我要用到这个芯片上面的五个串口,所以拿了官方的UART0例子当做参考,然后看了芯片手册还有时钟树以及开发注意事项,上面就说串口0/1有双时钟,其他三个串口3/4/5(没有串口2)就跟着时钟时钟走,因此其他几个串口外设驱动我也就参考串口0的参考写。但是莫名其妙的是单独串口3不能正常收发,其他几个参考下来都可以的。

于是又仔细去看了一下芯片手册关于串口那部分的说明,也没有发现串口3不一样的地方,唯独就是串口3好像只有两个引脚可以使用,没有映射到其他引脚,像另外四个串口的收发引脚都是两个。难道会跟着有关?后来去网上查原因,发现复旦微也有跟STM32CubeMX一样的图形化配置工具,就是如下图所示这样,正常串口3有问题,提供的keil例子里面也没有串口3的例子,那就用官方工具生成试试看。

在这里插入图片描述

关于这个东西,它也有自己的名字,复旦微叫它魔方,也挺有意思的这个名字取得。然后就是一顿操作,点击配置了一下串口3的设置参数等,再把配置的工程下载下来,打开看一下。结果一下子就知道了原因,官方对串口3的这一步配置与其他几个串口都不一样,就是在这个地方。

GPIO_InitStruct.remapPin      = FL_ENABLE;    //使能数字功能重定向

试了一下,把串口3两个引脚的remapPin都设置为使能,发现果然成功实现收发了。因为我看串口0是没有使能数字功能重定向,也就一并模范了,没想到串口3因为自身原因造成无法收发,必须配置为数字功能重定向使能才行。具体串口3的配置如下:

    GPIO_InitStruct.pin           = FL_GPIO_PIN_2;
    GPIO_InitStruct.mode          = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType    = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull          = FL_ENABLE;     //上拉使能
    GPIO_InitStruct.remapPin      = FL_ENABLE;    //使能数字功能重定向
    GPIO_InitStruct.analogSwitch  = FL_DISABLE;    //不使能模拟开关使能
    (void)FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.pin           = FL_GPIO_PIN_3;
    GPIO_InitStruct.mode          = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType    = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull          = FL_DISABLE;    //发送不上拉
    GPIO_InitStruct.remapPin      = FL_ENABLE;     //串口3需要将其使能才能正常工作
    GPIO_InitStruct.analogSwitch  = FL_DISABLE;
    (void)FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

总结这次解决的方法就是需要将remapPin配合为FL_ENABLE,也就是使能引脚的数字重定向功能即可~,如果也有其他小伙伴在开发这款芯片时候也遇到这种情况,可以把我这个例子当做参考哈。同时也感觉现在国产芯片做的越来越不错了,一些配套工具也越来越完善了。

好了,今天的例子就分享到这里了~

本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。

另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞和收藏,谢谢~



版权声明:本文为OMGMac原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。