TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430FR2355: UART與clock的設定問題

Part Number:MSP430FR2355

使用的是MSP430FR2355TRHA

我想在2355上做一個 clock16M 雙UART通訊

使用的範例是含有driverlib的eusci_a_uart_ex1_loopbackAdvanced

但這個範例是1M的

我要怎麼設定且確定我的clock是16M的

目前設定是eusci_a_uart_ex1_loopbackAdvanced預設的:

//!  SMCLK = MCLK = BRCLK = DCOCLKDIV = ~1MHz, ACLK = 32.768kHz

//Set ACLK = REFOCLK with clock divider of 1
CS_initClockSignal(CS_ACLK,CS_REFOCLK_SELECT,CS_CLOCK_DIVIDER_1);
//Set SMCLK = DCO with frequency divider of 1
CS_initClockSignal(CS_SMCLK,CS_DCOCLKDIV_SELECT,CS_CLOCK_DIVIDER_1);
//Set MCLK = DCO with frequency divider of 1
CS_initClockSignal(CS_MCLK,CS_DCOCLKDIV_SELECT,CS_CLOCK_DIVIDER_1);

UART設定為

param.clockPrescalar = 104;
param.firstModReg = 2;
param.secondModReg = 0xD6;
param.parity = EUSCI_A_UART_NO_PARITY;
param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;
param.uartMode = EUSCI_A_UART_MODE;
param.overSampling = EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION;

在9600時可以正常回覆

但改baud rate就無法通訊了

而且設定的值和 software-dl.ti.com/…/index.html 

計算出來的也不同

Eirwen:

已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

,

Wade Wang:

請問調查的進度

根據計算機的計算

http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html

除了參數完全不正確以外

我目前執行的也僅限於9600可以工作

換成19200就不會回應

但是計算機是算不出我給的參數

目前兩個port都使用同一種參數

,

Wade Wang:

現在我們改clock來源後

請問我這兩個來源為什麼一個可以工作

這是可以工作的

FRCTL0 = FRCTLPW | NWAITS_1;

__bis_SR_register(SCG0); // disable FLL CSCTL3 |= SELREF__REFOCLK; // Set REFO as FLL reference source CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_5;// DCOFTRIM=5, DCO Range = 16MHz CSCTL2 = FLLD_0 + 487; // DCOCLKDIV = 16MHz __delay_cycles(3); __bic_SR_register(SCG0); // enable FLL Software_Trim(); // Software Trim to get the best DCOFTRIM value

CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK; // set default REFO(~32768Hz) as ACLK source, ACLK = 32768Hz

收和發都正確

這是有問題的

FRCTL0 = FRCTLPW | NWAITS_1; do { CSCTL7 &= ~(XT1OFFG | DCOFFG); // Clear XT1 and DCO fault flag SFRIFG1 &= ~OFIFG; } while (SFRIFG1 & OFIFG); // Test oscillator fault flag CS_setExternalClockSource(32768); CS_turnOnXT1LF(CS_XT1_DRIVE_3); __bis_SR_register(SCG0); // disable FLL CSCTL3 |= SELREF__XT1CLK; // Set XT1 as FLL reference source CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_5;// DCOFTRIM=5, DCO Range = 16MHz CSCTL2 = FLLD_0 + 487; // DCOCLKDIV = 16MHz __delay_cycles(3); __bic_SR_register(SCG0); // enable FLL Software_Trim(); // Software Trim to get the best DCOFTRIM value

CSCTL4 = SELMS__DCOCLKDIV | SELA__XT1CLK; // set XT1 (~32768Hz) as ACLK source, ACLK = 32768Hz CS_initClockSignal(CS_MCLK, CS_DCOCLKDIV_SELECT, CS_CLOCK_DIVIDER_1); CS_initClockSignal(CS_SMCLK, CS_DCOCLKDIV_SELECT, CS_CLOCK_DIVIDER_1);

兩個都是16M

但是第二個送一樣的byte會收到錯誤的資料

,

Alice:

您好,

      您能否确认从发送引脚TX发出的字节中一个位的脉冲宽度?

     在9600波特率下,宽度应该约为104微秒,而在19200波特率下,宽度应该约为52微秒。

     由于这是一个“回环”示例,假设您是将TX引脚直接连接到RX引脚,对吗?

,

Wade Wang:

目前可以確定我們的clock是有問題的

因為我們沒用過FLL做clock調整

調整成16M後baud rate與參數都是正確的

接線是PC – com1 – UART A0 – 2355  – UART A1 – com2 – PC

,

Alice:

您好,

     1. 您确定问题是由于在选择 XT1 时钟作为 DCO 的参考时未使用 FLL。

     2. 您将时钟速度调整到 16M 并启用 FLL 后,UART 正确接收和发送数据。

     是这样吗?您还需要我们做什么?

,

Wade Wang:

我們會先調查FLL設定的問題

似乎是參數設定導致機器當機

之後成功設定正確的clock就沒有uart通訊失敗的狀況了

赞(0)
未经允许不得转载:TI中文支持网 » MSP430FR2355: UART與clock的設定問題
分享到: 更多 (0)