皇冠怎么注册登入: [MCU] MSP430 DCO UART波特率问题

开心8网址官网官方网
1140|11
楼主
 楼主 | 2020-6-13 16:01 | 只看该作者 ||退出气泡模式 |倒序浏览 |阅读模式
我现在在使用MSP430AFE253 ,使用内部晶振产生UART波特率,但是在使用过程中发现一个问题,就是一批芯片波特率参数必须设置的不一样,百度发现是因为MSP430内部DCO频率会不一样,百度上提供了一个用定时器来自动测试内部DCO频率的办法,但是我没太看明白,不知道哪位大侠能指点一二
沙发
| 2020-6-13 19:06 | 只看该作者
板凳
| 2020-6-13 19:08 | 只看该作者
这个DCO频率只需校准一下吧   差异那么大吗
地板
 楼主 | 2020-6-13 20:47 | 只看该作者
zhangmangui 发表于 2020-6-13 19:06
http://www.ds822.com/40/lit/an/slaa336a/slaa336a.pdf

多谢大侠了
5
 楼主 | 2020-6-13 20:48 | 只看该作者
zhangmangui 发表于 2020-6-13 19:08
这个DCO频率只需校准一下吧   差异那么大吗

同一个程序,皇冠怎么注册登入:有的UART可以用,有的不能用
6
 楼主 | 2020-6-14 10:13 | 只看该作者
zhangmangui 发表于 2020-6-13 19:06
http://www.432.8119944.com/lit/an/slaa336a/slaa336a.pdf

现在又遇到一个新的问题,我把DCO_Library.s43  加入工程中,在MAIN里 #include "DCO_Library.h"
但是编译的时候出现错误:
Error[e46]: Undefined external "TI_SetDCO(int)" referred in main ( E:\SuPh\hardware\code\Ver100\Debug\Obj\main.r43 )
我看了  DCO_Library.s43  文件里有              PUBLIC  TI_SetDCO   
DCO_Library.h   里有   extern char TI_SetDCO(int delta);

不知道他 LINK 为什么就是不成功
7
| 2020-6-14 22:09 | 只看该作者
jiyu75 发表于 2020-6-14 10:13
现在又遇到一个新的问题,我把DCO_Library.s43  加入工程中,在MAIN里 #include "DCO_Library.h"
但是编 ...

你看看应该是语法问题吧
8
| 2020-6-15 15:08 | 只看该作者
这个一致性也太差了吧。
9
 楼主 | 2020-6-20 13:06 | 只看该作者
zhangmangui 发表于 2020-6-14 22:09
你看看应该是语法问题吧

已经搞定了,是C和C++的问题
10
 楼主 | 2020-6-20 13:09 | 只看该作者
zhangmangui 发表于 2020-6-13 19:06
http://www.334.sr822.com/lit/an/slaa336a/slaa336a.pdf

大侠,使用了 DCO_Library.s43 的库 函数,代码在下面,但是测试下来,3块板子,一个SMCLK 输出1.93M ,一个1.66M 一个1.87M  UART口根本没办法配置才能保证3个板子UART都出9600的波特率,请问大侠,我程序哪里不对么,
  WDTCTL = WDTPW + WDTHOLD;
  Init_Clk();  
  Init_IO();   
//  BCSCTL3 = LFXT1S1;
//  P1DIR |= 0x1; // P1.1 and P1.4 outputs
//  P1SEL |= 0x01;//P1.4 SMCLK output
//  P1SEL2= 0x01;// P1.4 SMCLK output  

  Delay_ms(100);
  
  result = TI_SetDCO(TI_DCO_5MHZ);
  
  if( result == TI_DCO_SET_TO_SLOWEST ) // returned result if DCO registers hit min
  {
  while(1); // trap the CPU if hit
  }
  else if( result == TI_DCO_SET_TO_FASTEST ) // returned result if DCO registers hit max
  {
  while(1); // trap the CPU if hit
  }
  else if( result == TI_DCO_TIMEOUT_ERROR ) // result if DCO takes >10000 loops
  {
  while(1); // trap the CPU if hit
  }  
  
  Init_Uart();


//****************************************************
//Shanghai GanKun Co., Ltd.
//designed  by hank
//Main fuction
//****************************************************
void Init_Clk(void)
{
  
//  DCOCTL = DCO0 + DCO1 ;              // DCO  = 3
//  BCSCTL1 = XT2OFF + RSEL2 + RSEL3 ;          //  RSEL= 12   CLK = 5.8MHZ   XT2 OFF
  DCOCTL = DCO0 + DCO1  + DCO2 ;              // DCO  = 3
  BCSCTL1 = XT2OFF + RSEL0  + RSEL1  + RSEL2 + RSEL3 ;          //  RSEL= 12   CLK = 5.8MHZ   XT2 OFF
  
  
  BCSCTL2 = 0;                          // SMCLK = DCO   MCL = DCO
  BCSCTL3 =LFXT1S1;            //LFXT = VLOCLK  
   
}

//****************************************************
//Shanghai GanKun Co., Ltd.
//designed  by hank
//Main fuction
//****************************************************
void Init_IO(void)
{
    P1DIR =BIT0+BIT3+BIT4;
    P1REN = 0;
    P1SEL = BIT0+ BIT3+BIT4;                       // P1.3,P1.4 = USART0 TXD/RXD   
    P1SEL2 = BIT0;
   
    P2DIR = 0X01;
    P2REN = 0X00;
    P2SEL = 0X00;   
    P2SEL2 = 0X00;      
   
    P2OUT = 0x00;

    SET_RS485_READ;   
   
}

11
| 2020-6-21 21:40 | 只看该作者
感觉时钟没锁定的样子  是否需要校准
12
 楼主 | 2020-6-22 09:37 | 只看该作者
zhangmangui 发表于 2020-6-21 21:40
感觉时钟没锁定的样子  是否需要校准

不太明白您校准的意思,按照我的理解,他就是根据内部低频的时钟来 修正 SMCLK的 时钟,我不需要时钟特别准确,UART口的配置我可以自己调,但是我需要他一致性很好,也就是一批芯片 修正后的SMCLK 都差不多,这样我UART口的配置才为能统一的数据
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

开心8网址官网官方网 永利游戏开户直营 返回顶部 返回列表
免费澳门旅游 银泰鱼虾蟹骰宝网址 智联国际娱乐城电子游戏 新加坡赌场有没有中文网上娱乐场 早餐小吃车图片大全
偷渡澳门被抓会怎样登入 长安 金沙酒店登入 菲律宾申博太阳城游戏网页版开户网登入 亚洲国际BBIN波音馆最牛攻略 墨尔本赌场
太阳城网址导航nsb8888.com游戏下载网上娱乐场 澳门趴仔诀窍登入 主池 边池登入 2015TPT决赛资格网上娱乐场 大发888幸运农场开奖直播
www.8898.so 东南亚博彩公司登入 菲律宾申博红太阳娱乐 澳门赌场棋牌 斗地主赌博游戏登入