打印
[DemoCode下载]

新唐cortex RS485通信代码

[复制链接]
1701|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Messi1999|  楼主 | 2015-6-6 21:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Messi1999 于 2015-6-6 21:26 编辑

正在用,在网上看到的分享给大家
    #define UARTClkSource_in22MHZ   (CLKSEL1 = ((CLKSEL1 & (~UART_CLK)) | UART_22M))  


    #define UART0_Clock_EN    APBCLK |= UART0_CLKEN   // Enable UART0 clock  


    void UART_Init(void)  
    {  
        /* Step 1. GPIO initial */   
        P3_MFP &= ~(P31_TXD0 | P30_RXD0);     
        P3_MFP |= (TXD0 | RXD0);            //P3.0 --> UART0 RX  
                                //P3.1 --> UART0 TX  
      
        P0_MFP &= ~(P03_AD3_RTS0 | P02_AD2_CTS0);  
        P0_MFP |= (RTS0 | CTS0);            //P0.3---->RTS0自动方向控制  
                                        //这里就是配置的地方,笔者就是这里错了,导致了3个星期没有出来,         
        /* Step 2. Enable and Select UART clock source  */  
        UART0_Clock_EN;         //UART Clock Enable, APBCLK[16]:1  
      //UARTClkSource_ex12MHZ;  //UART Clock is ext12MHz, CLKSEL1[25,24]: 00  
        UARTClkSource_in22MHZ;  //使用内部22MHZ晶振  
        CLKDIV &= ~(15<<8);   //UART Clock DIV Number = 0;  
                                                               
        /* Step 3. Select Operation mode */  
        IPRSTC2 |= UART0_RST;   //Reset UART0  
        IPRSTC2 &= ~UART0_RST;  //Reset end  
        UA0_FCR |= TX_RST;      //Tx FIFO Reset  
        UA0_FCR |= RX_RST;      //Rx FIFO Reset  
        UA0_FCR |= RFITL_1;     //设置为1个字节触发中断  
      
        UA0_LCR &= (~SPE);  
        UA0_LCR &= (~EPE);  
        UA0_LCR &= (~PBE);      //Parity Bit Disable  校验禁止  
      
        UA0_LCR &= ~WLS;  
        UA0_LCR |= WL_8BIT;     //8 bits Data Length  8位长度  
        UA0_LCR &= NSB_ONE;     //1 stop bit          1位停止位  
      
        /* Step 4. Set BaudRate to 115200*/  
        //UA0_BAUD |= DIV_X_EN;   //Mode2:DIV_X_EN = 1  
        //UA0_BAUD |= DIV_X_ONE;  //Mode2:DIV_X_ONE =1  
      //上面是使用12M晶振的波特率设置  


      



    UA0_BAUD &= (~(1<<29));       //    UA0_BAUD |= (1<< 29);   //Mode2:DIV_X_EN = 1  
    UA0_BAUD &= (~(1<< 28));          //    UA0_BAUD |= (1<< 28);  //Mode2:DIV_X_ONE =1  



    /* For XTAL = 12 MHz */  
    //UA0_BAUD |= ((12000000 / 9600) -2);   //Set BaudRate to 115200;  UART_CLK/(A+2) =   



    //115200, UART_CLK=12MHz  



    /*FOr 12MHz*/  



    UA0_BAUD |= ( 22118400UL / 9600/16  -2);  



      



    /* For XTAL = 11.0592 MHz */  
    /UA0_BAUD |= ((11059200 / 115200) -2); //Set BaudRate to 115200;   



    //UART_CLK/(A+2) = 115200, UART_CLK=12MHz  



    void initRS485(void)  
    {  
     UA0_FUN_SEL = RS485_EN;        //设置为485功能  
     UA0_FCR |= (RX_DIS);           //禁止接收器接受</p><p> UA0_RS485_CSR |= RS485_NMM;    //设置为485普通操作模式  
     UA0_RS485_CSR |= RS485_AUD;    //设置为控制自动方向模式</p><p> </p><p> /* 开启UART0中断 */  
     UA0_IER |= RDA_IEN;           //开启可接受数据中断和  
     UA0_IER |= RLS_IEN;           //接收器上中断状态使能,是一个错误中断,见M0手册</p><p> NVIC_ISER |= UART0_INT;  
    // NVIC_IPR3 |= UART0_PRI0;      //设置优先级为3(最小优先级)  
    }






沙发
Messi1999|  楼主 | 2015-6-6 21:27 | 只看该作者
void initRS485(void)  
{  
    UA0_FUN_SEL = RS485_EN;                 //设置为485功能  
    UA0_FCR |= (RX_DIS);                    //禁止接收器接受  
  
    UA0_RS485_CSR |= RS485_NMM;             //设置为485普通操作模式  
    UA0_RS485_CSR |= RS485_AUD;             //设置为控制自动方向模式  
  
//  UA0_IER |= AUTO_RTS_EN;  
//  UA0_FCR  |= RTS_TRI_4;  
//  UA0_MCR |= (LEV_RTS_H);                 //设置RTS为1,使能485驱动器  
  
    /* 开启UART0中断 */  
    UA0_IER |= RDA_IEN;                     //开启可接受数据中断和  
    UA0_IER |= RLS_IEN;                     //接收器上中断状态使能  
  
    NVIC_ISER |= UART0_INT;  
//  NVIC_IPR3 |= UART0_PRI0;                //设置优先级为3(最小优先级)  
}  


使用特权

评论回复
板凳
水一人| | 2015-6-7 20:19 | 只看该作者
刚好需要,谢谢楼主

使用特权

评论回复
地板
芙蓉洞| | 2015-6-10 08:24 | 只看该作者
485和232是不是原理一样啊,连接232的就能连接485吧

使用特权

评论回复
5
wright0418| | 2015-6-10 08:44 | 只看该作者
芙蓉洞 发表于 2015-6-10 08:24
485和232是不是原理一样啊,连接232的就能连接485吧

232 是全双工 -- 只能一对一
485 是半双工  -- 可以一对多

使用特权

评论回复
6
gaoyang9992006| | 2015-6-11 16:52 | 只看该作者
这个协议内容跟232有什么区别呢,我只知道传说距离比232元的多的多了。

使用特权

评论回复
7
mintspring| | 2015-6-14 11:45 | 只看该作者
485比232用的多,好多工业通信用的就是这个,光端机都支持。

使用特权

评论回复
8
598330983| | 2015-6-14 17:22 | 只看该作者
void initRS485(void)  
    {  
     UA0_FUN_SEL = RS485_EN;        //设置为485功能  
     UA0_FCR |= (RX_DIS);           //禁止接收器接受</p><p> UA0_RS485_CSR |= RS485_NMM;    //设置为485普通操作模式  
     UA0_RS485_CSR |= RS485_AUD;    //设置为控制自动方向模式</p><p> </p><p> /* 开启UART0中断 */  
     UA0_IER |= RDA_IEN;           //开启可接受数据中断和  
     UA0_IER |= RLS_IEN;           //接收器上中断状态使能,是一个错误中断,见M0手册</p><p> NVIC_ISER |= UART0_INT;  
    // NVIC_IPR3 |= UART0_PRI0;      //设置优先级为3(最小优先级)  
    }
这个用法跟232有分别没

使用特权

评论回复
9
Messi1999|  楼主 | 2015-6-14 20:29 | 只看该作者
我感觉就是232啊,不知道硬件上232和485的区别在哪里

使用特权

评论回复
10
643757107| | 2015-6-16 20:06 | 只看该作者
485是232的升级版本,可以传输的更远。

使用特权

评论回复
11
RAYINGPX| | 2017-7-11 21:15 | 只看该作者
MARK下

使用特权

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

本版积分规则

36

主题

363

帖子

1

粉丝