打印
[STM8]

STM8S103K3 UART1无**常使用

[复制链接]
3935|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dingsujie|  楼主 | 2013-10-22 14:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下是一段RS485 采用UART1接收程序;但程序调试中UART1_GetFlagStatus(UART1_FLAG_RXNE)读到的永远都是RESET;请帮忙详解:
   /*****************************   端口初始化   ************************************/
void Port_Init(void)
{
    GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_IN_PU_NO_IT);
    GPIO_Init(GPIOB, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_HIGH_FAST);//初始化端口B高速推挽输出高电平
    GPIO_Init(GPIOC, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_HIGH_FAST);//初始化端口B高速推挽输出高电平
   // GPIO_Init(GPIOD, GPIO_PIN_ALL, GPIO_MODE_IN_PU_IT);//初始化端口D上拉输入有中断功能
    GPIO_Init(GPIOF, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_SLOW);
}

/*****************************   RS485初始化  ************************************/
void Uart1_RS485_Init(void)
{
   RS485_RE_LOW();//RS485接收数据使能
   RS485_DE_LOW();//RS485发送数据失能
   GPIO_WriteLow(GPIOD,GPIO_PIN_5);//关闭RS485发送端口
   //GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_FL_IT);//设置为浮动输入
   UART1_DeInit();
   /*
     波特率9600
    半双工,异步,1位起始;8位数据、1位停止、无校验、只接收
    地址为0*/
   UART1_Init((u32)9600, UART1_WORDLENGTH_8D,
              UART1_STOPBITS_1, UART1_PARITY_NO,
              UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_RX_ENABLE);
   UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);//使能接收中断
   UART1_HalfDuplexCmd(ENABLE);//开启半双工模式
   UART1_Cmd(ENABLE);//开启串口
}
/*****************************   RS485——MCU数据通讯  ************************************/
void  Uart1_RS485_Receivebyte(void)
{     uchar i=0,j=0;
       while (UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET);
       if(i==5)
       { i=0;
           for(j=0;j<5;j++)
             {RX_Disbuff[j]=0x00;}
        RX_Disbuff[i]=UART1_ReceiveData8();
        TimingDelay=0;
        TIM1_Cmd(ENABLE);//使能TIM1定时器
        TimingDelay = TIM1_GetCounter();//获取TIM1计数值
        if(UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET && TimingDelay<40000 )//判断4ms内是否有新的数据
        {i++;
         TIM1_SetCounter(0);}
            else
            {i=0;
             TIM1_SetCounter(0);}
        }
}
沙发
lee2k| | 2013-10-24 15:36 | 只看该作者
老天!本来写寄存器10几行就能搞定的事,用库编看着就头晕!
抱歉,我用的是中断来接受UART数据,看不懂为什么要用查询方式!

使用特权

评论回复
板凳
trumpxp| | 2013-10-24 16:03 | 只看该作者
这个例程   我也看的模模糊糊的   没有怎么看懂   楼主

使用特权

评论回复
地板
dingsujie|  楼主 | 2013-10-28 15:25 | 只看该作者
数据现在能够接收了;但是接收的数据值好像不对;通讯协议的要求为:接收5个字节的数据;字节1:地址;字节2、3:数据;字节4,5:校验码。当间隔超过3.5个字符时间(定义为4MS)时,表示通讯数据帧开始(或结束)。

使用特权

评论回复
5
dingsujie|  楼主 | 2013-10-28 15:25 | 只看该作者
求大神解答

使用特权

评论回复
6
戈卫东| | 2013-10-30 12:02 | 只看该作者
我是来看标题的的......

使用特权

评论回复
7
戈卫东| | 2013-10-30 12:02 | 只看该作者
我是来看标题的河-----蟹的......

使用特权

评论回复
8
戈卫东| | 2013-10-30 12:03 | 只看该作者
河-----蟹好厉害....

使用特权

评论回复
9
wenshijian| | 2013-10-31 15:03 | 只看该作者
我*你是来刷屏的吧~ 寄存器版本俺也不会,帮你顶下看有没有高人

使用特权

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

本版积分规则

21

主题

523

帖子

4

粉丝