智能车制作

标题: K60超频到180M后 串口发送出现乱码 [打印本页]

作者: 写轮无语    时间: 2013-4-24 19:36
标题: K60超频到180M后 串口发送出现乱码
我一直用K60一直是超频到180M在使用,可是最近在用无线串口时发现180M情况下  波特率就算很低还是乱码  我不超频发送就好了  (UART是用的龙丘的库)不知道哪位大神有何见解
作者: huang91    时间: 2013-4-24 19:41
UART_init (UART0,90000,9600);  

试试这个
作者: 写轮无语    时间: 2013-4-24 20:28
huang91 发表于 2013-4-24 19:41
UART_init (UART0,90000,9600);  

试试这个

谢谢   这就好了   不过9600不行  要大的才行  我以为是因为总线时钟高的原因得   没想到提高了才行  汗~~~

作者: 子言O(∩_∩)O~    时间: 2013-4-24 20:30
超频180m
作者: melon_1    时间: 2013-4-24 20:31
写轮无语 发表于 2013-4-24 20:28
谢谢   这就好了   不过9600不行  要大的才行  我以为是因为总线时钟高的原因得   没想到提高了才行  汗~ ...

什么意思呢???我超频180mhz,,,自己写的驱动程序,,,56mhz的时候可以正常接收图像数据,,180mhz就数据全部丢掉了~????????、

作者: huang91    时间: 2013-4-24 20:32
写轮无语 发表于 2013-4-24 20:28
谢谢   这就好了   不过9600不行  要大的才行  我以为是因为总线时钟高的原因得   没想到提高了才行  汗~ ...

最后一个参数爱改多少改多少。

作者: 写轮无语    时间: 2013-4-24 20:35
huang91 发表于 2013-4-24 20:32
最后一个参数爱改多少改多少。

恩恩  波特率啊  

作者: 写轮无语    时间: 2013-4-24 20:35
子言O(∩_∩)O~ 发表于 2013-4-24 20:30
超频180m

是啊

作者: 写轮无语    时间: 2013-4-24 20:36
melon_1 发表于 2013-4-24 20:31
什么意思呢???我超频180mhz,,,自己写的驱动程序,,,56mhz的时候可以正常接收图像数据,,180mhz就数 ...

恩恩    看看你串口时钟那里   你超频后总线时钟变了啊

作者: melon_1    时间: 2013-4-24 20:42
写轮无语 发表于 2013-4-24 20:36
恩恩    看看你串口时钟那里   你超频后总线时钟变了啊

我用的串口0,,时钟是由core的频率决定的吧??这是我计算波特率的方法:

sbr = (unsigned short)((coreClk_khz *1000)/(baud * 16));
UART0_BDH = (unsigned char)((sbr & 0x1F00) >> 8);
UART0_BDL = (unsigned char)(sbr & 0x00FF);


你说的是红色的coreClk_khz????这个????
这个还需要怎么处理么???

作者: melon_1    时间: 2013-4-24 20:44
写轮无语 发表于 2013-4-24 20:36
恩恩    看看你串口时钟那里   你超频后总线时钟变了啊

coreClk_mhz = pll_init();

unsigned char pll_init()
{
  unsigned char pll_freq=0;
  unsigned char reg=0;

// if (clk_option > 3) {return 0;} //return 0 if one of the available options is not selected
// if (crystal_val > 15) {return 1;} // return 1 if one of the available crystal options is not available
//This assumes that the MCG is in default FEI mode out of reset.
   reg = MCG_S;
//========FEI to FBE mode============
// Enable external oscillator, RANGE=1 (1~8M oscillator), HGO=1, EREFS=1(oscillator request), LP=0, IRCS=0
    MCG_C2 = MCG_C2_RANGE(1) | MCG_C2_HGO_MASK | MCG_C2_EREFS_MASK;

// Select external oscillator and Reference Divider and clear IREFS to start ext osc
// CLKS=2(external reference clk enable), FRDIV=2, IREFS=0
   MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(2);

   while (!(MCG_S & MCG_S_OSCINIT_MASK)){reg = MCG_S ;}; //wait for OSCINIT to be set wait for crystal selected by C2[EREFS] has been initialized


  while (MCG_S & MCG_S_IREFST_MASK){}; // wait for Reference clock Status bit to clear

  while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}; // Wait for clock status bits to show clock source is ext ref clk

  MCG_C5 = MCG_C5_PRDIV(0); // 4MHz
  //MCG_C5 = MCG_C5_PRDIV(1); //  2MHz

   set_sys_dividers(0,2,2,7);//core
   MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(21);//4*45=180mhz
   pll_freq = 180;

//   set_sys_dividers(0,1,1,2); //MCG=PLL,
//   MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(4);//2*28=56mhz
//   pll_freq = 56;

  while(!(MCG_S & MCG_S_PLLST_MASK)){}; // wait PLLST to be set,indicating the current source for PLLS clock is PLL

  while(!(MCG_S & MCG_S_LOCK_MASK)){}; //wait LOCK to be set, indicating the PLL has acquired lock.

  //============PBE to PEE mode======================

  MCG_C1 &= ~MCG_C1_CLKS_MASK; // select PLL as the system clock source.

  while(((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){}; //wait for PLL output is selected to feed MCGOUT

  //============MCGOUT CLK is set!======================================

  return pll_freq;
} //pll_init


按照我这样的写法应该不用该串口时钟那边的程序了吧???

作者: 写轮无语    时间: 2013-4-24 20:59
coreClk_khz=90000  试试
作者: orthodox    时间: 2013-4-24 22:45
超频后貌似只能用UART0跟UART1,这只是我的看法,因为我超频后用UART1是可以用的,计算波特率的公式嘛,你的那个是对的
作者: 写轮无语    时间: 2013-4-24 22:56
orthodox 发表于 2013-4-24 22:45
超频后貌似只能用UART0跟UART1,这只是我的看法,因为我超频后用UART1是可以用的,计算波特率的公式嘛,你的 ...

我同学  超频180M后用的UART3和UART4  并且没有遇到我的问题直接成功了的

作者: orthodox    时间: 2013-4-24 22:59
写轮无语 发表于 2013-4-24 22:56
我同学  超频180M后用的UART3和UART4  并且没有遇到我的问题直接成功了的

我也是用的龙丘的UART,超频后就只能用0跟1 ,不知道啥情况,但是还能用,就OK啦

作者: dapan945    时间: 2013-4-25 01:55
龙丘各种问题
作者: 时光茶居    时间: 2013-4-25 09:13
学习
作者: 忘从前    时间: 2013-4-25 09:17

作者: yuanhao0230    时间: 2013-4-25 14:51
你的串口参数重新计算没?!
作者: 同心繁星    时间: 2013-4-26 13:36
学习了

作者: idao    时间: 2014-3-13 16:32
huang91 发表于 2013-4-24 19:41
UART_init (UART0,90000,9600);  

试试这个

超频180Mhz,为什么这里用90000? 大神明示!!

作者: huang91    时间: 2014-3-13 17:37
idao 发表于 2014-3-13 16:32
超频180Mhz,为什么这里用90000? 大神明示!!

计算公式,你用的底层库决定的。

作者: asdf123    时间: 2014-4-17 21:45
写轮无语 发表于 2013-4-24 20:59
coreClk_khz=90000  试试

我也是出问题了呢,按你说的设了也不行呢





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2