今天来分享一个关于开发国产芯片(复旦微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,也就是使能引脚的数字重定向功能即可~,如果也有其他小伙伴在开发这款芯片时候也遇到这种情况,可以把我这个例子当做参考哈。同时也感觉现在国产芯片做的越来越不错了,一些配套工具也越来越完善了。
好了,今天的例子就分享到这里了~
本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞和收藏,谢谢~