[DemoCode下载] 新唐cortex RS485通信代码

[复制链接]
2226|10
 楼主| Messi1999 发表于 2015-6-6 21:25 | 显示全部楼层 |阅读模式
本帖最后由 Messi1999 于 2015-6-6 21:26 编辑

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


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


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


  38.       



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



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



  43.     //115200, UART_CLK=12MHz  



  44.     /*FOr 12MHz*/  



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



  46.       



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



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



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






 楼主| Messi1999 发表于 2015-6-6 21:27 | 显示全部楼层
  1. void initRS485(void)  
  2. {  
  3.     UA0_FUN_SEL = RS485_EN;                 //设置为485功能  
  4.     UA0_FCR |= (RX_DIS);                    //禁止接收器接受  
  5.   
  6.     UA0_RS485_CSR |= RS485_NMM;             //设置为485普通操作模式  
  7.     UA0_RS485_CSR |= RS485_AUD;             //设置为控制自动方向模式  
  8.   
  9. //  UA0_IER |= AUTO_RTS_EN;  
  10. //  UA0_FCR  |= RTS_TRI_4;  
  11. //  UA0_MCR |= (LEV_RTS_H);                 //设置RTS为1,使能485驱动器  
  12.   
  13.     /* 开启UART0中断 */  
  14.     UA0_IER |= RDA_IEN;                     //开启可接受数据中断和  
  15.     UA0_IER |= RLS_IEN;                     //接收器上中断状态使能  
  16.   
  17.     NVIC_ISER |= UART0_INT;  
  18. //  NVIC_IPR3 |= UART0_PRI0;                //设置优先级为3(最小优先级)  
  19. }  


水一人 发表于 2015-6-7 20:19 | 显示全部楼层
刚好需要,谢谢楼主
芙蓉洞 发表于 2015-6-10 08:24 | 显示全部楼层
485和232是不是原理一样啊,连接232的就能连接485吧
wright0418 发表于 2015-6-10 08:44 | 显示全部楼层
芙蓉洞 发表于 2015-6-10 08:24
485和232是不是原理一样啊,连接232的就能连接485吧

232 是全双工 -- 只能一对一
485 是半双工  -- 可以一对多
gaoyang9992006 发表于 2015-6-11 16:52 | 显示全部楼层
这个协议内容跟232有什么区别呢,我只知道传说距离比232元的多的多了。
mintspring 发表于 2015-6-14 11:45 | 显示全部楼层
485比232用的多,好多工业通信用的就是这个,光端机都支持。
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有分别没
 楼主| Messi1999 发表于 2015-6-14 20:29 | 显示全部楼层
我感觉就是232啊,不知道硬件上232和485的区别在哪里
643757107 发表于 2015-6-16 20:06 | 显示全部楼层
485是232的升级版本,可以传输的更远。
RAYINGPX 发表于 2017-7-11 21:15 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

363

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部