错误之STM32F072CBT6芯片的串口高级功能之反相配置问题(HAL库)

   日期:2021-01-13     浏览:222    评论:0    
核心提示:串口的使用,通常都是修改波特率,停止位,校验位等这几个常见的参数,所以这些的配置基本是没有什么问题的,不过今天逛论坛的时候发现有些芯片是支持软件反相功能的,目前我发现F0的大多都有这个功能,F1的没有这个功能,大家可以去看看其他一些芯片。一、F0芯片手册上寄存器在串口的控制寄存器 2( USART_CR2)第17位注意:这里要配置反相,必须是UE=0的时候才能改写在F1的手册上,这几个位是保留位二、进行测试理论上可以实现的,故我直接在我只有的串口代码上直接加下面代码,直接操作寄存器USART

串口的使用,通常都是修改波特率,停止位,校验位等这几个常见的参数,所以这些的配置基本是没有什么问题的,不过今天逛论坛的时候发现有些芯片是支持软件反相功能的,目前我发现F0的大多都有这个功能,F1的没有这个功能,大家可以去看看其他一些芯片。

一、F0芯片手册上寄存器

在串口的控制寄存器 2( USART_CR2)第17位

注意:这里要配置反相,必须是UE=0的时候才能改写
在F1的手册上,这几个位是保留位

二、进行测试

理论上可以实现的,故我直接在我只有的串口代码上直接加下面代码,直接操作寄存器

USART3->CR1 &=~(1<<0);    // UE=0
USART3->CR2 |=1<<18;
USART3->CR2 |=1<<17;// TX 有效电平反向
USART3->CR1 |=1<<0;     // UE=1

下面是我在线调试采集的现象

可以看到我只是在下面增加这几行代码,寄存器对应的值发生了变化(这样的话可以在硬件上节省几毛钱),可以直接软件控制反相,不需要硬件上增加反相器。

同时我想HAL库的话,应该也是可以直接控制的。
之后对工程进行了搜索TXINV关键字,发现在这下面的配置中有支持TX反相的功能配置
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;//高级功能初始化
然后我将上面的配置改为下面配置
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_TXINVERT_INIT;//TX 反相
按照这个配置,照理调试的时候也是可以将寄存器的值进行改变的,但是调试时TXINV的值是不变的

可以看到调试时,寄存器值根本没变,奇怪,我直接控制寄存器都可以控制,为啥使用HAL反而还不能控制了?
之后再HAL的串口初始化函数中找了许久,没找到问题,实在找不到了,我打开CUBEMX查看了下这个芯片,发现他也是支持反相的

于是我重新创建了一份只有串口初始化的工程,发现问题了

huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_TXINVERT_INIT;
huart3.AdvancedInit.TxPinLevelInvert = UART_ADVFEATURE_TXINV_ENABLE;

他选择了TXINV配置后,还对TXINV进行了使能…
于是我将这行代码复制我之前测试的上面去,哎,成功了…

三、总结及现象

对于一个不太熟悉的库,首先参考他的例程配置,可以减少很多不必要的麻烦
另外这个串口的高级功能,要先配置,再使能,同样这里的高级功能还有其他的一些如自动检测波特率功能,到时也可以试试。
图1是串口3输出软件不反相

图2是串口3输出软件反相

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服