【PIC32MX220F032B】UARTを使ってみる。その1:送信

2021年2月21日

◆PIC32MX220F032BでUARTをつかってみます。手始めに文字列を送信してみます。

レジスタ設定

データシートDS61107EのPage26に薄らと記述例があります。
ほとんどPIC24Fと同様です。。。

PIC32MXでUART送信

ポート設定

データーシートのPage148を参照にしました。
PIC24Fと違いU1TXはどのピンでも対応という訳ではなく
RPA0Rは可能だけど、RPA1Rは他の機能という感じです。
こちらは記述例が全くないのでトライアンドエラーで何とかしました。
左辺がBit(pin)で右辺が機能となります。U1TXは「0b0001」となります。

送信方法

データシートDS61107EのPage18に送信方法が記載されています。
U1TXREGレジスターにロードすればいいみたいです。

ソース

MPLABではターゲットに【PIC32MX220F032B】が無かったので
泣く泣くMPLABXを使いました。ボーレートは9600bpsです。
データシートDS61107EのPage14Table21-2を参照しました。
実行は、文字列’abcdefg’と改行とNewラインをずーっとです。
プログラムの例はこちら↓>

#include <stdio.h>
#include <plib.h>
#include <p32xxxx.h>
#include <stdlib.h>
//== OSC:8MHz SYSCLK:40MHz=(OSC_8*MUL_20)/(PLLI_2*PLLO_2) ====
#pragma config FNOSC=FRCPLL, POSCMOD=OFF, FPLLIDIV=DIV_2
#pragma config FPLLMUL=MUL_20, FPBDIV=DIV_1, FPLLODIV=DIV_2
#pragma config FWDTEN=OFF, ICESEL=ICS_PGx2
//== void ====================================================
void U1string(unsigned char *tex, char count);
//== string ==================================================
unsigned char string_box1[15] = "abcdefg¥r¥n" ;
//== main ====================================================
int main(void) {
//== OSC =================================================
SYSTEMConfigPerformance(40000000);  //40MHz
//== PORT ================================================
TRISA = 0x00000000;
TRISB = 0x00000000;
//== UART ================================================
RPA0R = 0B0001;         //U1TX_RPA0
U1MODE = 0x00000000;    //Clear
U1MODEbits.UARTEN = 1;  //15_UART_Enable
U1MODEbits.RTSMD = 1;   //11_SimplexMode
U1MODEbits.BRGH = 0;    //3_StandardSpeed*16
U1STA = 0x00000000;     //Clear
U1STAbits.UTXEN = 1;    //10_TX_enable
U1BRG = 259;            //U1BRG=(Fcy/(16*9600))-1
//========================================================
while(1)
{
U1string(string_box1,9);
//delay_ms(200);
//delay_us(1);
}//while(1)
}//int main(void)
//== U1string ==============================================================
void U1string(unsigned char *tex, char count)
{
char i;
for(i=0; i<count; i++)
{
while(U1STAbits.UTXBF);
U1TXREG = tex[i];
}//for(i=0; i<count; i++)
}//void U1string(unsigned char *tex, char count)

UART送信をハイパーターミナルで確認

回路図

df12f96c.png

よろしければバナーをクリックお願いします!