OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8660|回复: 15

关于cortex m0 uart RS485 通信

[复制链接]

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-3-6
在线时间
6 小时
发表于 2013-3-22 15:19:21 | 显示全部楼层 |阅读模式
请问:
        我想从外面接收到信号然后再通过io口发送出去,数据源是差分信号 ,经过MAX485后接到cortex m0, 芯片是nxp的1114f。

是不是只要我把终止位数还有数据位数设置 好,还有波特率设置好了就可以了呢?下面的uart初始函数可以吗?有没有哪些设置漏掉了?有一个RTS引脚的设置不是很清楚,只接收数据,暂时不考虑发送数据,是不是就可以不管RTS引脚了?接收数据还有一个地址匹配寄存器是怎么设置呢?数据经过max485的信号波形如下图,网上485的例子找不到,故来求教,谢谢大家!

void uartInit(void)
{
    uint16_t usFdiv;
uint32_t Clear=Clear;
    LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 16);
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 6);
    LPC_IOCON->IO1_5 |= 0x01;
LPC_IOCON->IO1_6 &= 0x07;
    LPC_IOCON->IO1_6 |= 0x01;   //P1.6 设置成RXD
LPC_IOCON->IO1_7 &= 0x07;
    LPC_IOCON->IO1_7 |= 0x01;   //P1.7 设置成TXD
    LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12);                              
    LPC_SYSCON->UARTCLKDIV       = 0x01;                             

    LPC_UART->LCR  = 0x87;  //8位传输,2个停止位,无奇偶校验,允许访问除数锁存器                                           
    usFdiv = (SystemFrequency/LPC_SYSCON->UARTCLKDIV/16)/UART_BPS; //除数锁存器的值     
    LPC_UART->DLM  = usFdiv / 256; //写除锁存器高位值
    LPC_UART->DLL  = usFdiv % 256; //写除锁存器低位值
    LPC_UART->LCR  = 0x07;     //DLAB置0 ,禁止除数锁存器的访问                                      
    LPC_UART->FCR  = 0x07; //允许FIFO ,清空RxFIFO和TxFIFO
    LPC_UART->RS485CTRL = 0x30; //使能自动方向控制(bit4),要发送时,方向控制管脚为“1”,最后一个数据发送完成生,置“0”    
    LPC_UART ->IER = 0x01;    //只允许接收中断,关闭其他中断                                  
Clear=LPC_UART->LSR;
}






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-22 15:42:54 | 显示全部楼层
回复【楼主位】bigsand:
---------------------------------
你这个不是串口格式了吧?
不是串口格式,就不能用串口来接收了,换成中断解码,或者其他方式吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-3-6
在线时间
6 小时
 楼主| 发表于 2013-3-22 15:57:57 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这是一个数据包,一个数据包有MTBP(0~1s任意时间长),BREAK(88us),MAB(8us),之后第一个帧都是44us,一个帧有11位,1个起始位(低电平),8个数据位,还有2个终止位(高电平)。
照这样看,串口格式是这样:UART的格式 可以通过程序设置   有些会在停止位之前有一个奇偶校验之类的  停止位也不一定只是一个单位大小  可以设置为1、1.5、2等,,中间的数据位长度也可以设置位 6 7 8 位等

这样的话应该可以实现的吧
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-3-6
在线时间
6 小时
 楼主| 发表于 2013-3-22 16:15:06 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
从0帧到512帧,只要设置好数据位为8位,终止位为2位,再设置好波特率,是完全符合串口格式要求的吧?
我是用串口中断来接收数据的,,但是接收不到数据,不知道哪里出了问题。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-22 17:07:08 | 显示全部楼层
回复【3楼】bigsand:
---------------------------------
你知道串口数据的格式么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-3-6
在线时间
6 小时
 楼主| 发表于 2013-3-22 17:46:12 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
o到512帧就符合串口格式吧,请指教
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-22 20:35:51 | 显示全部楼层
串口每隔几个位就有一个起始和停止位,你这数据格式,怎么去满足这个要求啊?
如果不满足,串口直接认为你这数据有问题不予理会。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-3-6
在线时间
6 小时
 楼主| 发表于 2013-3-22 20:57:11 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
有没有这种情况:即使MTBP和BREAK还有MAB不符合串口的格式要求,但是从0帧开始一直到512帧都是符合要求的,就接收得到这0~512帧  ?
如此反复,只要遇到MTBP和BREAK还有MAB,就不理会,0~512帧就全部接收到。
我要的就是这0~512帧的数据。谢谢指教!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-22 21:16:57 | 显示全部楼层
回复【8楼】bigsand:
---------------------------------
这我就不知道,对你这个协议不熟。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-3-6
在线时间
6 小时
 楼主| 发表于 2013-3-22 21:34:25 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
那请问,就串口协议而言,是不是就MTBP和BREAK还有MAB这样的不符合要求的数据不理会,但是还是会继续接收0~512帧这样的符合要求的数据?

就看成这样:一长断波型中有符合要求的波,也有不符合要求的波,串口只挑符合要求的波,忽略不符合要求的波?结果接收到最后,接收到的波形成的数据是连续成串的?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-23 00:55:16 | 显示全部楼层
回复【10楼】bigsand:
---------------------------------
你测试下吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2012-12-8
在线时间
21 小时
发表于 2013-4-14 22:06:50 | 显示全部楼层
dmx512协议
回复 支持 反对

使用道具 举报

0

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2012-12-8
在线时间
21 小时
发表于 2013-4-14 22:08:38 | 显示全部楼层
break信号的检测可以用错误帧来检测到,然后就用uart功能就可以了,不需要用485模式
我上月也搞了个这个
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-11-7
在线时间
0 小时
发表于 2013-11-7 10:10:59 | 显示全部楼层
原子有没有兴趣弄一套 M0+的开发板呢,感觉这个东西应该很适合物联网啊。。。
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
发表于 2014-6-25 22:06:43 | 显示全部楼层
回复【12楼】romeo0108:
---------------------------------
当串口接收不到预期的停止位时,会产生一个帧错误,然后就知道是break了,88us大概是两个字节的时间,
回复 支持 反对

使用道具 举报

5

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-7-18
在线时间
3 小时
发表于 2014-7-18 15:57:24 | 显示全部楼层
回复【13楼】romeo0108:
---------------------------------
能共享下么 目前也在学习这个
嵌入式 Cortex-M0 M3 A8 电路 PCB VC C++ DSP FPGA 人与人之间的差距在于8小时之外的8小时
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-5 01:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表