會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





[dsPIC33FJ16GS504] 使用 UART 的問題
新會員
註冊日期:
2016/12/05 11:45
所屬群組:
註冊會員
文章: 9
等級: 1; EXP: 86
HP : 0 / 21
MP : 3 / 19
離線
請問 : 依照文件 "DS70000582E_CN" 的第18頁寫好程式, 使用單步執行(F8), 為什麼在示波器上從 RB0~RB15 都看不到
U1TXREG = 'a';
的輸出?

謝謝


#include "p33FJ16GS502.h"
#include <xc.h>

_FOSCSEL(FNOSC_FRC)
_FOSC(FCKSM_CSECMD & OSCIOFNC_ON)
_FWDT(FWDTEN_OFF)
_FPOR(FPWRT_PWR128) // & BOREN_OFF)
_FICD(ICS_PGD2 & JTAGEN_OFF)


#define FP 39613750 // Hz
#define BAUDRATE 9600 // bps
#define BRGVAL ((FP/BAUDRATE)/16)-1

int main(void)
{
int InputVoltage;


// UART test
// UART1_Initialize();
// UART1_Write(0x65);

// RPINR18 = 0x0607;
// RPOR3 = 0x0003;
// U1STA = 0x4400;
// U1BRG = 0x002A;
// U1MODE = 0x8008;

/* Configure Oscillator to operate the device at 40Mhz
Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
Fosc= 7.37*(43)/(2*2)=80Mhz for Fosc, Fcy = 40Mhz */
// Fosc= 79.2275MHz, Fcy = 39.61375MHz, Fvco = 158.455MHz

/* Configure PLL prescaler, PLL postscaler, PLL divisor */
PLLFBD=41; /* M = PLLFBD + 2 */
CLKDIVbits.PLLPOST=0; /* N1 = 2 */
CLKDIVbits.PLLPRE=0; /* N2 = 2 */

__builtin_write_OSCCONH(0x01); //1 /* New Oscillator selection FRC w/ PLL */
__builtin_write_OSCCONL(0x01); /* Enable Switch */

while(OSCCONbits.COSC != 0b001); //1 /* Wait for Oscillator to switch to FRC w/ PLL */
while(OSCCONbits.LOCK != 1); /* Wait for Pll to Lock */

/* Now setup the ADC and PWM clock for 120MHz
((FRC * 16) / APSTSCLR ) = (7.37MHz * 16) / 1 = 117.9MHz*/

ACLKCONbits.FRCSEL = 1; /* FRC provides input for Auxiliary PLL (x16) */
ACLKCONbits.SELACLK = 1; /* Auxiliary Ocillator provides clock source for PWM & ADC */
ACLKCONbits.APSTSCLR = 7; /* Divide Auxiliary clock by 1 */
ACLKCONbits.ENAPLL = 1; /* Enable Auxiliary PLL */

while(ACLKCONbits.APLLCK != 1); /* Wait for Auxiliary PLL to Lock */

PTPER = 2404; /* PTPER = ((1 / 400kHz) / 1.04ns) = 2404, where 400kHz
is the desired switching frequency and 1.04ns is PWM resolution. */
U1MODEbits.STSEL = 0; // 1-Stop bit
U1MODEbits.PDSEL = 0; // No Parity, 8-Data bits
U1MODEbits.ABAUD = 0; // Auto-Baud disabled
U1MODEbits.BRGH = 0; // Standard-Speed mode
U1BRG = BRGVAL; // Baud Rate setting for 9600
U1STAbits.UTXISEL0 = 0; // Interrupt after one TX character is transmitted
U1STAbits.UTXISEL1 = 0;
IEC0bits.U1TXIE = 1; // Enable UART TX interrupt
U1MODEbits.UARTEN = 1; // Enable UART
U1STAbits.UTXEN = 1; // Enable UART TX
/* Wait at least 105 microseconds (1/9600) before sending first char */
// DELAY_105uS

while(PTPER > 10)
{
U1TXREG = 'a'; // Transmit one character
}

}

2月02日 18:13:11
轉換PDF檔 列印


Re: [dsPIC33FJ16GS504] 使用 UART 的問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 13878
等級: 72; EXP: 7
HP : 1066 / 1776
MP : 4626 / 67054
離線
TXD & RXD 這兩隻腳需用 PPS 去指出所使用的腳位。沒有 PPS 的設定UART 的訊號是無法禁出的。所以還要去研讀一下 Peripheral Pin Select (PPS) 的設定功能。

2月03日 14:52:34
轉換PDF檔 列印


Re: [dsPIC33FJ16GS504] 使用 UART 的問題
新會員
註冊日期:
2016/12/05 11:45
所屬群組:
註冊會員
文章: 9
等級: 1; EXP: 86
HP : 0 / 21
MP : 3 / 19
離線
謝謝版主
如附圖, 是原始文件有提醒說還要設定 fosc
但是沒有說要用 pps 設定 UART-TX & RX 的腳位
因為別家的 MCU UART1, UART2 的 TX, RX, 都是固定腳位
所以只要設定好 UARTx 的內容, 就有 RS232 的資料輸出

能請版主建議原廠, 在文件內再加上如下之類的提醒, 這樣文件的完整性就更好了

// Configure UART I/O pin as needed

附加檔案:



jpg  111.jpg (51.78 KB)
50242_58984706b3de6.jpg 682X401 px

2月06日 18:00:09
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088221 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project