搜索
bottom↓
回复: 3

想请问一下个新唐偶同位校验的怪异问题

[复制链接]

出0入0汤圆

发表于 2014-9-28 21:08:50 | 显示全部楼层 |阅读模式
目前使用NUC100RC1BN UART的初始化如下

SYSCLK->APBCLK.UART1_EN    = 1;
SYS->IPRSTC2.UART1_RST     = 1;
SYS->IPRSTC2.UART1_RST     = 0;
SYS->GPBMFP.UART1_RX       = 1;
SYS->GPBMFP.UART1_TX       = 1;
SYS->GPBMFP.UART1_nRTS_ALE = 1;        
UART1->FCR.TFR             = 1;
UART1->FCR.RFR             = 1;
UART1->FCR.RFITL           = 0;
UART1->LCR.SPE             = 1;
UART1->LCR.EPE             = 1;       
UART1->LCR.PBE             = 1;
UART1->LCR.WLS             = 3;
UART1->LCR.NSB             = 1;
UART1->BAUD.DIV_X_EN       = 1;
UART1->BAUD.DIV_X_ONE      = 1;
UART1->BAUD.BRD            = 24000000 / 1200 -2;
UART1->IER.RDA_IEN         = 1;   
UART1->IER.THRE_IEN        = 0;
UART1->ALTCON.RS485_NMM    = 0;       
UART1->ALTCON.RS485_AUD    = 1;
UART1->FUNSEL.FUN_SEL      = 3;       
NVIC_EnableIRQ(UART1_IRQn);

目前是希望用485对MODBUS设备下命令   使用偶同位但是
UART1->LCR.SPE             = 1;
UART1->LCR.EPE             = 1;       
UART1->LCR.PBE             = 1;
三行都是设定为1  有同位效验   但是不知道为什么   用示波器看第九位一直出不来    请有经验的前辈给点方向谢谢

UART1->LCR.SPE             = 1;
UART1->LCR.EPE             = 0;       
UART1->LCR.PBE             = 1;

就算LCR.EPE下0波型还是看不来差异

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2014-9-28 22:10:18 | 显示全部楼层
刚才测试了一下   UART1-> LCR.EPE   可以用来控制第九位是0或1  所以校验不是自动产生的?如果我把485换回RS232模式问题也是一样     那这样不就要一个字节一个字节慢慢传   在传送之前要先计算好校验  等传输完成后再重新计算校验吗?那效率不是很低?

出0入0汤圆

发表于 2014-9-29 17:14:23 | 显示全部楼层
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

出0入0汤圆

 楼主| 发表于 2014-9-29 22:27:24 | 显示全部楼层
//***********************************************************************
最后是自己写程式产生       貌似FIFO中已经有包含第九位(由LCR.EPE控制)

unsigned char Even_Check(unsigned char Temp)
{
unsigned char i;
unsigned char Count;
Count = 0;
for(i=0;i<8;i++)
{
if(Temp&0x01){Count++;}
Temp = Temp >> 1;
}       
if(Count%2){return 0;}
else       {return 1;}
}
//***********************************************************************
void Uart1_SendChar(unsigned char Temp)
{
while(UART1->FSR.TX_FULL);
if(Even_Check(Temp)){UART1->LCR.EPE = 1;}       
else                {UART1->LCR.EPE = 0;}
UART1->DATA = Temp;
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-2 23:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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