UART、つまりシリアルがまともに動いてくれなくて困ってるわけです。
datasheet:http://ww1.microchip.com/downloads/jp/DeviceDoc/jp531358.pdf
UARTのマニュアル(日本語):http://ww1.microchip.com/downloads/jp/DeviceDoc/70188D_JP.pdf
ここに書いてあるように、UxMODE、UxSTAレジスタで設定して、UxBRGにボーレートを設定して関数呼ぶわけです、が、まあ動くはずもなく…
実際にはC30を用いて、なんかよくわからないコンフィグのパラメータ並べるわけです、回折はここが詳しめ:http://www.crystal-creation.com/robot/technical-information/microcomputer/pic/programming/built-in-module/uart/
(dsPIC33FJ32FP202) - FT232(秋月モジュール) -USB- PCみたいな構成だけど、オシロで見る分にはFT232のRXポートまではちゃんと来てるみたい…?
PC側の問題(ドライバ、ポート、後はTeraTermとか)なのか、FT232の問題(ピンが違うor電圧設定が違う)なのかようわからん…
UM232RのRXDピンの波形 |
#include < p33FJ32GP202.h > #include < uart.h > _FOSCSEL(FNOSC_PRI & IESO_OFF); _FOSC(POSCMD_HS & OSCIOFNC_OFF & IOL1WAY_OFF); _FWDT(FWDTEN_OFF & WINDIS_OFF); _FPOR(FPWRT_PWR1 & ALTI2C_OFF); _FICD(JTAGEN_ON & ICS_PGD1); //UARTの設定 //IDLE_ONE? unsigned int U1MODE_value = UART_EN & UART_IDLE_CON & UART_IrDA_DISABLE & UART_MODE_SIMPLEX & UART_UEN_00 & UART_EN_WAKE & UART_DIS_LOOPBACK & UART_DIS_ABAUD & UART_UXRX_IDLE_ONE & UART_BRGH_SIXTEEN & UART_NO_PAR_8BIT & UART_1STOPBIT; unsigned int U1STA_value = UART_INT_TX_BUF_EMPTY & UART_SYNC_BREAK_DISABLED & UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR; const unsigned int CLOCK_FREQUENCY = 7370000; const unsigned int BAUDRATE = 9600; int main() { CLKDIV = 0; //set 1:1 //AD1PCFGL = 0xFFFF; //portA -> all digital TRISA = 0x0000; //all out PORTA = 0x0001; //RA0 -> high TRISB = 0x0010; //RB4(RP4)はinput //UART1ピンの割り当て RPINR18bits.U1RXR = 2;//RXはRP2, RB2 6pin RPOR2bits.RP4R = 3; //TXはRP4(RB4) //UART1初期設定 //ボーレートの計算 const double BaudRateF = ((double)CLOCK_FREQUENCY / (16*BAUDRATE)) - 1; const unsigned int baud = (unsigned int)(BaudRateF + 0.5); //9600bps、パリティ無し8bit、フロー制御なし OpenUART1(U1MODE_value, U1STA_value, baud); volatile int j = 0; while(1) { //文字を送る WriteUART1('k'); j++; } return 0; }