单片机一个串口复用问题

wzj9683 2013-07-30 11:49:05
我用一个单片机的TXD,RXD分别接两个模块,从一个接受信息,另一个发送信息,可以分时进行,电路不冲突(单个模块只与单片机的TXD RXD中一个连接即可通信),但波特率不同,那我是不是要分两次初始化串口呢?能实现吗?还有串口中断怎么写呢,可以通过写入SBUF的信息不同来判断吗?(分开单独通信已经搞定了)
...全文
646 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzj9683 2013-08-02
  • 打赏
  • 举报
回复
解决了啊,收和发前分别初始化串口还是可以用的,谢谢大家的建议
斯璇 2013-08-01
  • 打赏
  • 举报
回复
用IO口模拟一个TXD就是了。反正是固定波特率的。自己延时程序调下就可以了。
lr2131 2013-08-01
  • 打赏
  • 举报
回复
一个串口当两个不同的波特率串口用时可以的,但是,要是有两个独立的串口不就好了嘛,干嘛非要这么折磨自己呢。
of123 2013-07-31
  • 打赏
  • 举报
回复
可以实现。每次收转发或发转收时重新设置波特率。
腹黑大胖兔 2013-07-31
  • 打赏
  • 举报
回复
引用 9 楼 u011259650 的回复:
[quote=引用 4 楼 cuiwei860526 的回复:] 根据波特率不就可以判断了吗? 假设需要从A读信息发送到B 先设置成A的波特率,进中断,读取数据,配成B的波特率,发送出去,再设置成A的波特率等待。
用波特率判断可行吗,判断哪个参数呢?[/quote] 你应该预先知道A和B的波特率, 那么你设置成A的波特率的话,B发送的信息你是收不到的。 另外根据你的描述,你只要配置成A的波特率,B只是被动接受你发送的信息,所以你可以收到A的信息重新配置波特率然后发送给B,发完后再配成A的波特率。
腹黑大胖兔 2013-07-30
  • 打赏
  • 举报
回复
根据波特率不就可以判断了吗? 假设需要从A读信息发送到B 先设置成A的波特率,进中断,读取数据,配成B的波特率,发送出去,再设置成A的波特率等待。
schlafenhamster 2013-07-30
  • 打赏
  • 举报
回复
“什么叫开销大啊” OverHead 就是 每次 改变 波特率时 都 要 重新 初始化 一次。 “发送” 一般 不用 中断, 因为 你 知道,发 什么, 什么时间 发。 接受 中断 是要 的。
wzj9683 2013-07-30
  • 打赏
  • 举报
回复
什么叫开销大啊?还有我通过辨别发送接收内容不同怎么写串口中断呢?
schlafenhamster 2013-07-30
  • 打赏
  • 举报
回复
“但波特率不同,那我是不是要分两次初始化串口呢” 可以 2次 初始化, 不过 开销就大 了。 如果 硬件 有 2个 串口 就好了。
wzj9683 2013-07-30
  • 打赏
  • 举报
回复
引用 4 楼 cuiwei860526 的回复:
根据波特率不就可以判断了吗? 假设需要从A读信息发送到B 先设置成A的波特率,进中断,读取数据,配成B的波特率,发送出去,再设置成A的波特率等待。
用波特率判断可行吗,判断哪个参数呢?
lbing7 2013-07-30
  • 打赏
  • 举报
回复
就我们产品进行分时复用串行口的经验看,这样不太好弄.当然,我们是分别对两个设备,和楼主的有点区别 在用到对应的设备的时候,重新配置串行口 同时把接收和发送功能互斥配置(大概就是,接收数据的时候,不允许发送,发送数据的时候不允许接收) 虽然没这么用过,不过,感觉应该可以实现
schlafenhamster 2013-07-30
  • 打赏
  • 举报
回复
你现在 是 “半工”状态, 不能 同时 收发 (“全工“)
wzj9683 2013-07-30
  • 打赏
  • 举报
回复
“根据波特率不就可以判断了吗?”怎么判断啊?判断哪个量的值?
wzj9683 2013-07-30
  • 打赏
  • 举报
回复
我接收信息是持续的,我在特定的时候发送信息怎么让串口从接受改为发送呢?

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧