打印
[STM8]

求救 STM8 UART多机

[复制链接]
3929|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
along2000|  楼主 | 2010-7-22 20:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人已学生,参加比赛,现在要用UART多机
长话短说,我用的是地址唤醒,思路是这样的,主机需要信息时发送地址给从机(红外遥控发的),从机把相应的信息(温度、湿度)回应给主机,但过程中出现了几个问题:
1  1主1从用地址识别时应答都正确,1主多从后有时能行有时不行。
2  发送完成中断真的有点特别,它的标志位在复位后就置一,也就是开启中断就会响应,但我软件清零后它还会进中断。
不知我这样的多机通信正确么?用的是汇编,还有一个想法就是当从机出现意外时(温度过高),这时就需要从机主动给主机信号了,这是可以先把从机要发的第九位置一后把自己的地址发给主机,第二次发送异常数据,这样就实现了从机的主动发送而且主机也知道是哪部从机的信息,这个试过,但还没实现。
现求救我的思路那里有问题?
必要的话我晚点把我的汇编程序附上!谢谢
沙发
香水城| | 2010-7-23 11:07 | 只看该作者
1)1主1从用地址识别时应答都正确,1主多从后有时能行有时不行。
为什么不行?

2)发送完成中断真的有点特别,它的标志位在复位后就置一,也就是开启中断就会响应,但我软件清零后它还会进中断。
你应该在需要发送时才打开发送中断,其它时候不要开启中断。

使用特权

评论回复
板凳
along2000|  楼主 | 2010-7-23 14:46 | 只看该作者
谢谢香主 解决了主机主动索取从机的信息,又有了个小小的问题,给从机的待发送的第九位也就是T8置一后又没反应了,本来是这样想的,正常情况下主机主动索要从机的信号,这时从机待发送的第九位为0,如果有意外,从机就会把待发送的第九位置1发给主机,主机判断接收的第九位是否为一,若是则是收到的8为数据为从机地址,紧接着第二次会收到异常数据,这样就实现了主机和从机的主动性,第一步实现了,现在差第二步了,我感觉这种思路比我们老师说的方法好多了,现在的问题就是为什么给从机的T8写1后主机就不会收到数据了。
1  把从机T8置一后能发送出去回复但主机不会收到
2  使能发送和写DR的顺序有没有严格规定
谢谢

使用特权

评论回复
地板
香水城| | 2010-7-23 16:19 | 只看该作者
从机的T8写1后主机就不会收到数据了

你有没有用示波器看看,从机发送的数据是否出现在信号线上?如果数据出现在信号线上,再看主机的配置是否正确。

使用特权

评论回复
5
CrazyST| | 2010-7-23 17:29 | 只看该作者
个人理解是这样的:
1)1主1从用地址识别时应答都正确,1主多从后有时能行有时不行。
答:是用串口电平还是直接连上单片机?引脚是否干净(开发板一般都会连上232了)?
2)  发送完成中断真的有点特别,它的标志位在复位后就置一,也就是开启中断就会响应,但我软件清零后它还会进中断。
答:假设发送完成标志位不是为1而是0,也就是代表平时情况下都是发送没有完成的,发送没有完成也就是说你老在发送,这当然不可能,所以一开始肯定是发送已经完成,已经结束,等待下一次发送。我是这样理解它的意思的

还有,如果你把第9位用作数据,那么你是不打算用奇偶校验了?这不可靠啊

使用特权

评论回复
6
CrazyST| | 2010-7-23 17:38 | 只看该作者
1  把从机T8置一后能发送出去回复但主机不会收到
答:能否贴上你的串口配置?

2  使能发送和写DR的顺序有没有严格规定
答:手册上是写先使能发送器,然后再写DR,这样每写一次就发送一次,不必重复执行使能发送器指令。既然手册没有特别写到顺序问题,应该行得通

使用特权

评论回复
7
秋天落叶| | 2010-7-23 22:22 | 只看该作者
有时能行有时不能行?

使用特权

评论回复
8
along2000|  楼主 | 2010-7-24 10:28 | 只看该作者
贴上我那个破烂的汇编吧,大家不要笑话,尽管指出不足的地方,非常感激!
主机:UART_CHUSHI       
        ;;;;;;;;;;;;;;;;;;;;;;;;;UART初始化
        Bset PD_DDR,#5
        Bset PD_CR1,#5
        BRES PD_ODR,#5
        BRES PD_DDR,#6
        BRES PD_CR1,#6
        BRES PD_ODR,#6
       
        MOV UART2_CR1,#$50
        MOV UART2_BRR2,#$01;;;;;;;;;;;;;;初始化波特率9600
        MOV UART2_BRR1,#$34

       
        BSET UART2_CR2,#6;;;;;;;;;;;;;使能发送中断
        BSET UART2_CR2,#5;;;;;;;;;;;;;使能接收中断
        BRES ITC_SPR6,#0
        BRES ITC_SPR6,#1  ;;;;;;;;;;;;;中断优先级20号
        BRES ITC_SPR6,#2
        BRES ITC_SPR6,#3  ;;;;;;;;;;;;;中断优先级21号
        RIM
        BSET UART2_CR1,#6
        BSET UART2_CR1,#4
        BRES UART2_CR1,#2
        BSET UART2_CR1,#3
        BSET UART2_CR2,#3;;;;;;;;;;发送使能
        BSET UART2_CR2,#2;;;;;;;;;;接收使能
        RETF
从机:UART_CHUSHI         ;;;;;;;;;;;;;UART初始化
        BRES PD_DDR,#5
        BRES PD_CR1,#5
        BRES PD_ODR,#5
        BRES PD_DDR,#6
        BRES PD_CR1,#6
        BRES PD_ODR,#6
       
        MOV UART2_BRR2,#$01;;;;;;;;;;;;;;初始化波特率9600
        MOV UART2_BRR1,#$34
        MOV UART2_CR1,#$98 ;;;;;;;;9个数据位一个停止位 地址唤醒
        MOV UART2_CR2,#$62  ;;;;;;;使能接受 使能中断 处于静默
        MOV UART2_CR4,#$05 ;;;;;;;从机地址5
        BRES ITC_SPR6,#0
        BRES ITC_SPR6,#1  ;;;;;;;;;;;;;中断优先级20号
        BRES ITC_SPR6,#2
        BRES ITC_SPR6,#3  ;;;;;;;;;;;;;中断优先级21号
  
  RIM
        BSET UART2_CR2,#2
从机没有奇偶校验,等会再试试,真的想把从机待发送的第九位当数据处理啊。

使用特权

评论回复
9
CrazyST| | 2010-7-24 18:48 | 只看该作者
你把TX发送端的端口电平初始化为0!?
UART未被激活时,UART_TX引脚电平状态GPIO寄存器定义,为避免接受错误或总线瘫痪,最好将UART_TX引脚初始化为高电平推挽方式或OD方式!——《单片机编译原理与接口技术<新版>》

使用特权

评论回复
10
along2000|  楼主 | 2010-7-24 22:28 | 只看该作者
全部搞定 主机主动索取和从机的异常数据主动发送 研究了1周左右 虽然效率低点 但还是搞定了
谢谢大哥们的帮忙
看到九楼的IO初始化 估计是这疏忽了 现在行了 哈哈....

使用特权

评论回复
11
along2000|  楼主 | 2010-7-26 09:03 | 只看该作者
郁闷 又有了新的问题 假如多部从机同时发生意外并向主机发送数据 这不就乱了吗?
今天弄了一天 想了个办法 多加了一条数据线 是用从机的IO口互连的 初始化高电平 当一部从机正在发送意外数据时把这个数据线拉低 完成后释放 其他若发送意外数居前先判断这条数据线的电平再判断总线是否占用 占用时暂时不发送
现在的问题是这条数据线的电平好难搞 取决于两端IO口的设置 可看了用户手册上面好像没提到输入状态时的结构 所以一直没弄好 也就是每次用IDR来查询都会出现问题的
高手可不可以告诉下这种方法可行不
可行 IO两端怎么设置
不可行 有没有好点的方法
还有就是IO输入时的结构在哪里能找到?
谢谢!

使用特权

评论回复
12
CrazyST| | 2010-7-26 18:20 | 只看该作者
可行啊,
你的这条IO相当于“线与”吧,设为OD,我们老师说,STM8的IO结构不透明,手册上只是模拟不是真的。

使用特权

评论回复
13
香水城| | 2010-7-26 18:23 | 只看该作者
可行啊,
你的这条IO相当于“线与”吧,设为OD,我们老师说,STM8的IO结构不透明,手册上只是模拟不是真的。
CrazyST 发表于 2010-7-26 18:20


对的,设置为OD输出就是"线与"的效果,不必时常改变I/O口的方向。

请教一下:你们老师说“STM8的IO结构不透明”是什么意思?怎么才能叫透明?

使用特权

评论回复
14
CrazyST| | 2010-7-27 15:00 | 只看该作者
我记得当时老师谈及IO结构时说到手册上那个IO结构只是作为一个结构示意图,并不是真实的内部结构,不必细看,“不透明”这个词似乎表示的不太好,用“不公开”似乎也不准确。。。我也表达的不是很好,呵呵呵

使用特权

评论回复
15
香水城| | 2010-7-27 15:04 | 只看该作者
你见过哪个MCU在手册上给出了真实的内部结构、真实的线路图?

结构示意图就是为了让你能够好好地理解如何使用。

请问你需要了解什么内容,一定要知道真实的内部结构?

使用特权

评论回复
16
CrazyST| | 2010-7-27 15:31 | 只看该作者
我觉得也是,真实的内部结构怎么可能公开?我也没有必要知道里面的真实结构。只是模糊记得他当时是拿STM8的端口和51端口做比较时提及的,不过已经过了几个月,记不太住了,实在不好意思啊版主:$

使用特权

评论回复
17
pjdu| | 2010-9-23 11:37 | 只看该作者
mark一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

24

帖子

1

粉丝