久芯网

想用STM32 MCU做485通讯,一帧18位,能做到吗?

avatar 立码赚 提问时间: 2023-07-28 18:36:57 / 已解决
想用STM32 MCU做485通讯,一帧18位,能做到吗? [相关图片]
RS485 一般串口一帧最多11位,但我这个项目一帧要传18位,波特率2.5M,请问怎么做?用那款芯片适合?

如需获得 STM32 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

14个回答
  • avatar 下次还敢
    最佳答案
    回答时间: 2023-07-28 19:09:22

    使用内存的并口,加上并口转串口芯片实现起来超简单

  • avatar yr
    回答时间: 2023-07-28 19:40:41

    好像不行,usart的word length最多是9,加上start 和stop bit,硬件自动产生的,最多是11位,做不了18位。

  • avatar butterflyspring
    回答时间: 2023-07-28 19:58:59

    如果STM32这边只发不收的话,可以考虑用DMA+PWM的方式,根据发送的内容,预先在发送buffer中设置好18个比较寄存器的值。定时器设定为2.5M。这样普通的STM32都可以实现数据发送。这里注意使能预装载功能时,第一个发出的脉冲和DMA次数的关系。好在是起始位,那么发送buffer可以为17个。

  • avatar fafa1
    回答时间: 2023-07-28 20:29:12

    可以考虑 自己模拟时序啊

  • avatar 立码赚
    回答时间: 2023-07-28 20:53:00
    fafa1 发表于 2022-6-1 17:38
    可以考虑 自己模拟时序啊

    摸拟时序,这个不懂

  • avatar butterflyspring
    回答时间: 2023-07-28 21:14:58

    发送容易实现,麻烦的是接收呀~~

  • avatar 立码赚
    回答时间: 2023-07-28 21:32:33
    butterflyspring 发表于 2022-6-2 11:43
    发送容易实现,麻烦的是接收呀~~

    接收端不用管,客户机已经开发好了的

  • avatar 立码赚
    回答时间: 2023-07-28 22:02:13
    butterflyspring 发表于 2022-6-2 16:52
    如果STM32这边只发不收的话,可以考虑用DMA+PWM的方式,根据发送的内容,预先在发送buffer中设置好18个比较 ...

    感谢支技!要接收主机的命令

  • avatar 立码赚
    回答时间: 2023-07-28 22:29:30
    butterflyspring 发表于 2022-6-2 16:52
    如果STM32这边只发不收的话,可以考虑用DMA+PWM的方式,根据发送的内容,预先在发送buffer中设置好18个比较 ...

    我这项目是定为从机的,主机发送指令,从机要回应,好多个个指令

  • avatar butterflyspring
    回答时间: 2023-07-28 23:01:11
    yr 发表于 2022-6-6 10:00
    好像不行,usart的word length最多是9,加上start 和stop bit,硬件自动产生的,最多是11位,做不了18位。 ...

    主机发送的帧数是否有规律。 如果有规律可以在START 位触发SPI以2.5M的速率接受,相当与2.5M的采样。扣除起始位,一次会采用24位,选择其中的17位为有效位去解析。如果两帧连续,那么可以叠加。中间有空闲帧那就不是问题了。

  • avatar 立码赚
    回答时间: 2023-07-28 23:28:28
    butterflyspring 发表于 2022-6-6 11:38
    主机发送的帧数是否有规律。 如果有规律可以在START 位触发SPI以2.5M的速率接受,相当与2.5M的采样。扣除 ...

    你这招式太深奥,不会用

  • avatar yr
    回答时间: 2023-07-28 23:56:40
    butterflyspring 发表于 2022-6-6 11:38
    主机发送的帧数是否有规律。 如果有规律可以在START 位触发SPI以2.5M的速率接受,相当与2.5M的采样。扣除 ...

    485属异步通信,spi属同步通信,可靠的异步通信取决于start bit的判断,通常是过采样接合一些逻辑处理,基本上由串口的硬件实现,针对这个2.5Mhz波特率的例子,用软件判断start bit不是很可行,第二,就算start bit找到,用spi通信,怎么产生时钟让数据移位呢?

  • avatar 立码赚
    回答时间: 2023-07-29 00:14:37
    下次还敢 发表于 2022-6-6 17:14
    使用内存的并口,加上并口转串口芯片实现起来超简单

    难理解,听你说好像你做过类似的

  • avatar butterflyspring
    回答时间: 2023-07-29 00:34:23
    yr 发表于 2022-6-7 14:00
    485属异步通信,spi属同步通信,可靠的异步通信取决于start bit的判断,通常是过采样接合一些逻辑处理, ...

    如你所说,异步通信是通过start bit 同步开始,然后按照约定的波特率去采样接收数据的。 那么用start bit 的第一个下降沿做触发,这时候通过(中断或DMAMUX的信号)在2.5M内启动SPI. SPI以2.5M的等间隔速率去读数据,相当与在数据位的范围内采样度数,达到了异步采用的目的。 但是采样的数据个数无法达到18位(4-16位可设定)整数,所以多收几位进来再去处理。如果连续进来的话,可以通过收到的数据位依次处理掉起始位等非数据信息。 所以要看主机那边发送的数据帧是否有规律才行。

会员中心 微信客服
客服
回到顶部