STM32
直播中

吴湛

10年用户 833经验值
擅长:33391
私信 关注
[问答]

介绍一种多功能调试工具

怎样用STM32去实现USB转485呢?

回帖(1)

蔡鼎瑾

2021-12-17 14:46:34
看了小马哥的多功能调试工具真是羡慕啊,于是也做了个高速USBhub托了个xlink, 用stm32实现 USB转串口TTL/串口232/串口485(通过跳线来实现)/NRF24L01/红外,同时支持输出一路PWM输出。反正也用不到Altra的调试,于是就将另两路USB接了两个USB座,方便接U盘。测试了下USB转485,(因为485需要控制换向端),发现效果比想象的要好啊!与其说这是个调试工具,到不如说是个简易的stm32的开发板,接两条杜邦线就可以来调试啦。
  USB转485调试截图:
  
  

  

  调试日志:

  实现USB obLink调试以及USB转串口。这基本上都是以前就调好过了的。
  但是调试的时候发现oblink在下载的时候,当在Keil中设置速度最大时不稳定,经常下载失败,但是之前做的单独的oblink就没这问题,怀疑是GL850A的问题,看了下手册才知道其REF管脚要接680欧的电阻,而自己想当然的焊了1.5K的电阻,换后问题解决。

  开始调试NRF24L01,比较顺利,照着例程很容易就给移植过来了,但是突然发现,发送和接收函数中,发送的就是固定的32字节,而接收的也是固定的32字节,于是就想修改成适合程序的风格:send(u8 *buf,u16 len),接收至少要知道接收到了几个字符!于是看了下NRF24L01的寄存器,刚好有这个寄存器,读取便可知道里面有多少数据,于是跟着修改了发送的函数,将发送的数据个数修改成任意设置的,结果发现接收那块死活接收不到数据了,于是增加了发送的个数到32字节,终于收到数据了。于是设置了下接收FIFO的大小,结果发现,发送的数据只有跟接收FIFO一样的时候,接收端才能收到数据!真是变态啊!至少要有个超时吧??于是改了就32字节了,发送的数据如果超过32字节,就拆包发,如果少于32字节,就加个0做结尾符,多发几个无用的数据,接收端就像处理字符串那样去处理吧。

  开始调红外。当初做原理的时候,没想那么多,直接扯了条线接到一个IO上去了,结果看了下原子的程序,用的是定时器的输入捕获来做的,于是想改成收到中断后开定时器的方式来解决问题。刚好找到了他之前的一个版本的程序,修改了下居然OK了。而且效果也很不错,用家里的DVD遥控器试了下,也没问题。OK,暂告一段落。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分