搜索
bottom↓
回复: 16

【分享】kinetis的RS485例程——转帖

[复制链接]

出0入0汤圆

发表于 2014-9-4 14:15:02 | 显示全部楼层 |阅读模式
原帖链接:http://blog.chinaaet.com/detail/29698

RS485是半双工通信协议,是个UART经RS485电平转换芯片后用差分信号实现远距离传输。RS485电平转换芯片有个发送使能引脚,为了获得发送权发送数据前要将该引脚设成使能状态(本例中是高电平),发送完毕再将该引脚设成低电平以释放总线。下图中第1路(黄线)是数据引脚,第2路(蓝线)是发送使能引脚。

kinetis的UART可硬件产生发送使能信号,即RTS。只需比RS232通信多设2个寄存器即可实现该功能,分别是:

1、UARTx_MODEM,其第1位TXRTSE是发送器请求发送使能位,该位为1时,当一个字符放进一个空的发送器数据缓冲区(FIFO),RTS在起始位传送之前一个bit位的时间变为有效状态(本例是高电平),在所有数据发完之后一个bit位的时间变为有效状态(本例是低电平);第2位是发送器请求发送极性(RTS引脚的极性),为1时高电平有效,为0时低电平有效。

2、UARTx_RTS引脚对应的PORT复用成UARTx_RTS。

设了上述2个寄存器,就可以自动产生上图中的第2路(蓝线)波形了。下面是完整代码(注意2行加粗斜体字):

/*
* main implementation: use this 'C' sample to create your own application
*
*/

#define GPIO_PIN_MASK            0x3C000000
#define GPIO_PIN(x)                ((1<<x)&GPIO_PIN_MASK)
#include <stdio.h>

#include "derivative.h" /* include peripheral declarations */

void MCG_Init()
{
  SIM_SCGC6 |= 0x20000000; //SIM_SCGC6: RTC=1                     
  if ((RTC_CR & RTC_CR_OSCE_MASK) == 0u)//Only if the OSCILLATOR is not already enabled
  {
    RTC_CR &= ~0x3C00; //RTC_CR: SC2P=0,SC4P=0,SC8P=0,SC16P=0                    
    RTC_CR |= 0x0100;  //RTC_CR: OSCE=1                    
    RTC_CR &= ~0x0200; //RTC_CR: CLKO=0                    
  }
  //System clock initialization
  SIM_CLKDIV1 = 0x01130000; //SIM_CLKDIV1: OUTDIV1=0,OUTDIV2=1,OUTDIV3=1,OUTDIV4=3 Update system prescalers
  SIM_SOPT2 &= ~0x00010000; //SIM_SOPT2: PLLFLLSEL=0 Select FLL as a clock source for various peripherals
  SIM_SOPT1 &= ~0x00080000; //SIM_SOPT1: OSC32KSEL=0 System oscillator drives 32 kHz clock for various peripherals
  // Switch to FEE Mode
  SIM_SOPT2 |= 0x01;// SIM_SOPT2: MCGCLKSEL=1 0-System oscillator (OSCCLK), 1-32 kHz RTC oscillator
  MCG_C2 = 0x00; // MCG_C2: ??=0,??=0,RANGE=0,HGO=0,EREFS=0,LP=0,IRCS=0                           
  MCG_C1 = 0x02; // MCG_C1: CLKS=0,FRDIV=0,IREFS=0,IRCLKEN=1,IREFSTEN=0                           
  MCG_C4 |= 0xE0; //MCG_C4: DMX32=1,DRST_DRS=3                          
  MCG_C5 = 0x00; // MCG_C5: ??=0,PLLCLKEN=0,PLLSTEN=0,PRDIV=0                           
  MCG_C6 = 0x00;// MCG_C6: LOLIE=0,PLLS=0,CME=0,VDIV=0                           
  while((MCG_S & MCG_S_IREFST_MASK) != 0x00U) //Check that the source of the FLL reference clock is the external reference clock.
  {
  }
  while((MCG_S & 0x0CU) != 0x00U) // Wait until output of the FLL is selected
  {   
  }   
}
void UART_Init()
{
      SIM_SCGC4 |= 1 << 10;// SIM_SCGC1: UART0=1
      SIM_SCGC5 |= 1 << 9;// SIM_SCGC5: PORTA=1
PORTA_PCR17 = (3<<8) | (1<<6) ;// PORTA_PCR17: ISF=0,MUX=3 UARTDSE=1强输出      PORTA_PCR15 = (3<<8) | (1<<6) ;// PORTA_PCR15: ISF=0,MUX=3 做UART,DSE=1强输出
      PORTA_PCR14 = (3<<8) | (1<<6); // PORTA_PCR14: ISF=0,MUX=3 做UART,DSE=1强输出
      UART0_C4 = 0x14;    //波特率微调
      UART0_BDH = (4992>>8) & 0x1F;//设波特率1200bps
      UART0_BDL = 4992&0xFF;
      UART0_C2 |= 1<<2;//允许接收
UART0_MODEM = (1<<2) | (1<<1);//使用RTS,高电平有效}
void delay()
{
    unsigned long int i =0;
    for(i=0;i<3000000;i++)
    {
        asm("nop");
    }
}
int main(void)
{
    int tx_cnt,rx_cnt = 0;
    char rcv_buf[10];
    MCG_Init();
    UART_Init();
    printf("Hello (Kinetis) World in 'C' from MK60DX256Z derivative! \n\r");
    for(;;) {
        //发送
        if( (UART0_S1&(1<<7)) != 0)
        {
            UART0_D = 0x5F;
            UART0_C2 |= 1<<3;
            tx_cnt++;
            if(tx_cnt >= 3)
            {
                tx_cnt = 0;
                delay();
            }
        }
        //接收
        if( (UART0_S1&(1<<5)) != 0)
        {
            rcv_buf[rx_cnt] = UART0_D;
            rx_cnt++;
            if(rx_cnt >= 10)
            {
                rx_cnt = 0;
            }
        }
    }
    return 0;
}

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-9-4 14:18:48 | 显示全部楼层
沙发么.....顺带说一下,破千币币了.............

出100入101汤圆

发表于 2014-9-4 14:19:47 | 显示全部楼层
官网的KL25、K60资料链接,总结得已经相当好了。

http://www.freescaleic.org/article/id-326943

http://www.freescaleic.org/article/id-326980

出0入0汤圆

发表于 2014-9-4 14:23:34 | 显示全部楼层
支持原创,支持楼主!你怎么没兑?是在等开源项目的人一起兑吗?

出0入0汤圆

 楼主| 发表于 2014-9-4 14:25:06 | 显示全部楼层
fengyunyu 发表于 2014-9-4 14:19
官网的KL25、K60资料链接,总结得已经相当好了。

http://www.freescaleic.org/article/id-326943

需要我举报你吗?
看到你重复发了至少两个同样的了

出0入0汤圆

 楼主| 发表于 2014-9-4 14:25:40 | 显示全部楼层
wangpengcheng 发表于 2014-9-4 14:23
支持原创,支持楼主!你怎么没兑?是在等开源项目的人一起兑吗?

已经提交申请了,晚点 才会兑奖吧

出0入0汤圆

发表于 2014-9-4 14:27:20 | 显示全部楼层
cn_x 发表于 2014-9-4 14:25
已经提交申请了,晚点 才会兑奖吧

哦,那你得等等了,呵呵!

出100入101汤圆

发表于 2014-9-4 14:29:21 | 显示全部楼层
cn_x 发表于 2014-9-4 14:25
需要我举报你吗?
看到你重复发了至少两个同样的了

不至于吧?只是提醒下有些基础的东西不要重复发了。

出0入0汤圆

发表于 2014-9-4 14:32:52 | 显示全部楼层
等待楼主的酷贴

出0入0汤圆

发表于 2014-9-4 14:34:22 | 显示全部楼层
破12000了哦,恭喜!

出0入0汤圆

 楼主| 发表于 2014-9-4 14:35:10 | 显示全部楼层
fengyunyu 发表于 2014-9-4 14:29
不至于吧?只是提醒下有些基础的东西不要重复发了。


好吧,请你用kinetis任意一款芯片写一个最基本的RS485程序出来看看吧
是RS485而不是232,你再来看看这些帖子

出100入101汤圆

发表于 2014-9-4 14:39:52 | 显示全部楼层
cn_x 发表于 2014-9-4 14:35
好吧,请你用kinetis任意一款芯片写一个最基本的RS485程序出来看看吧
是RS485而不是232,你再来看看这些 ...

485、232从软件角度来说通常用法是一样的,只是多了一个收发方向控制脚。只是485是一般是半双工通信,但因为是查分信号,传输距离、抗干扰好很多。

出0入0汤圆

 楼主| 发表于 2014-9-4 14:48:45 | 显示全部楼层
fengyunyu 发表于 2014-9-4 14:39
485、232从软件角度来说通常用法是一样的,只是多了一个收发方向控制脚。只是485是一般是半双工通信,但 ...

这篇文章针对的就是  “ 只是多了一个收发方向控制脚”
在这里有一些相对于其他资料没有着重指出的内容
这个是可以使得大家在写类似程序和做类似应用的时候可以借鉴的
包括我看到的你回复的另外一个帖子,楼主很用心的在写每一个细节
即使对你来说很基础,但是对完全没接触过的人来说是一个很好的指导
别的文章没少会写得那么细致,而且每一个操作都截图
请尊重别人的劳动

出100入101汤圆

发表于 2014-9-4 14:52:40 | 显示全部楼层
cn_x 发表于 2014-9-4 14:48
这篇文章针对的就是  “ 只是多了一个收发方向控制脚”
在这里有一些相对于其他资料没有着重指出的内容
...

好的,是我轻率了。谢谢你的指正和分享。

出0入0汤圆

发表于 2014-9-5 09:14:54 | 显示全部楼层
谢谢楼主分享,写得很用心!

出0入0汤圆

发表于 2014-9-10 08:35:29 | 显示全部楼层
谢谢分享!               

出0入0汤圆

发表于 2014-9-10 09:23:41 | 显示全部楼层
官网的KL25、K60资料链接,总结得已经相当好了。
================================
收藏。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-8-25 23:21

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

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