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;
}
