![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_09.png?e8efa67)
こんにちは。
トランジスタ技術2007年8月号付録のdsPIC30Fを使って色々といじっているのですが、UARTのところで問題が現れてしまいました。
付録基盤の23・24ピン(dsPIC30F2012の16・17ピン)のURx/UTxを使って、他の組み込みチップと20~30バイトのパケットを通信したいのですが、ボーレートやパリティの設定を正しく行っても送受信ができません。
PCのRS232-Cと組み込みチップを繋げて通信はできているのですが、付録基盤から同じパケットを送信すると不定値が現れてしまいます。
電圧や配線は確かめましたが、特に問題がありそうな場所はありませんでした。
ソースは次のような感じです。助けていただけないでしょうか。
#include <uart.h>
#include <p30f2012.h>
void init() {
unsigned int _U1BRG; // U1BRG register config
unsigned int _U1MODE; // U1MODE register config
unsigned int _U1STA; // U1STA register config
CloseUART1();
ConfigIntUART1( UART_RX_INT_DIS & UART_TX_INT_DIS );
// U1BRG register
_U1BRG=( (7370000*4/19200)/16); // Fcy / BaudRate / 16
// U1MODE register, I/O (U1TX/U1RX), N81
_U1MODE = UART_EN &
UART_IDLE_CON &
UART_RX_TX &
UART_DIS_WAKE &
UART_DIS_LOOPBACK &
UART_EN_ABAUD &
UART_NO_PAR_8BIT &
UART_1STOPBIT;
// U1STA register
_U1STA = UART_INT_TX_BUF_EMPTY &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE &
UART_INT_RX_CHAR &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;
// Open UART1
OpenUART1(_U1MODE, _U1STA, _U1BRG);
} // end of init()
int main(void){
unsigned int packet[] = {パケットデータ}
unsigned int result[30];
unsigned int i;
// write process
for(i=0; i<PACKET_LENGTH; i++) {
while(U1STAbits.UTXBF != 0) { ; }
U1TXREG = packet[i] & 0xFF;
}
while(!U1STAbits.TRMT) {;}
// read process
for(i=0; i<PACKET_LENGTH; i++) {
while(U1STAbits.URXDA != 0) {;}
result[i] = U1RXREG & 0xFF;
} // for(i)
while(1) {;}
} // end of main()
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
一番最後の受信ループのところ;
URXDA==0
じゃあないのかなあ。1になるまで待っている。
moochinさん
回答ありがとうございます。
>URXDA=0 : 少なくとも1文字は読み取り可能
>URXDA=1 : 受信バッファが空
while( URXDA==0 ) {;} が正解ですね・・・
送信フラグの方の条件とこんがらがっていたようです。
改めてテストしてみましたが、やはりランダム値(ノイズ?)が現れて、正しいデータの送信も受信も行えませんでした。
というか、dsPICの送信バッファに何も書き込んでないにも関わらず、ランダム値が延々と出力されているようです。
(ADM3202レベルコンバータ経由でハイパーターミナル確認)
根本的な問題で、基盤のUART回りが壊れてる可能性もあらわれてきました。ili○| ̄|_
dsPIC30F2012の17,18ピンと付録基盤の23,24ピンの間は通電はしているので、dsPIC30F2012自体が壊れているのかもしれません。
No.2
- 回答日時:
あ、そうでしたか。
ピンは正しかった。するとソフトですね。よく判らないけど、U1STAの論理績を見るとRIDLEが1になっているように
思えます。受信がアイドル状態なので読み込んだつもりでもデータがおかしいのでは?
U1STAbits.RIDLE=0;と明示してみたらどうでしょうか?
No.1
- 回答日時:
ピンが違っているのでは?17--U1TX, 18--U1RX です。
または ALTIO を Enable にして、11,12 を使う。
moochinさん
回答ありがとうございました。
16,17ピンというのは私の間違いでした。実際には17,18ピンに接続していました。
dsPICとPCのRS-232のTx-Rxをレベルコンバータ越しに接続してみました。PICのU1TXをPCのRxに、PICのU1RXをPCのTxに繋げているのですが、正常な信号出力が確認できませんでした。でたらめなランダム値が出るか、PICからの信号が全く現れないのどちらか。
また片方の配線接続を外すとランダムな信号(ノイズ?)が受信されてしまいました。
ジャンパをカットしてALTTX、ALTRXで通信も試してみたのですが、やはりうまくいきませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# ある線が円の範囲に入っているかの計算 1 2022/12/07 16:14
- Visual Basic(VBA) エクセルVBA 3 2022/06/23 20:00
- ネットワーク I2Cのスタートコンディションについて 2 2023/03/03 01:03
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- Android(アンドロイド) Team microSDXCカード 256GB この製品は有名で性能は良いものでしょうか 5 2022/09/24 23:25
- 数学 (4)のim(T)をu1,u2,u3の線型結合で表せ、という問題がわからないです。回答を見ると私の解 2 2023/05/31 22:14
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ペイロードって何ですか?
-
ワード ある日突然 文書の表...
-
新しく出来たものなのに、使い...
-
wordの文書をPC画面中央に表示...
-
結局、ノートパソコンはいつ買...
-
FTPソフト filezillaのキューフ...
-
パソコン使える人はカッコイイ...
-
勝手にファイルが消えたり移動...
-
おすすめの百科事典
-
エクセルの列と行の見出しが小...
-
クリープを入れないコーヒーな...
-
フリーダイヤル
-
動画から静止画の切り出し
-
「共有違反」って?
-
2台のPCでRS-232C接続でファイ...
-
社内ネットワークで、ログアウ...
-
Microsoft office 2010
-
勝手にフォルダやファイルが開...
-
CISCO上でtftp操作
-
OLEオブジェクトを自動でサイズ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ペイロードって何ですか?
-
Winsock 受信について
-
UDPでマルチスレッドは可能か
-
HTTP POST送信のヘッダの書き方
-
シリアル通信でのデータ分け
-
パリティビットはわかるけど、...
-
同期速度とは
-
高速シリアル通信での大容量の...
-
トランジスタ技術8月号:UARTに...
-
IPヘッダの識別番号とTCPヘッダ...
-
ドコモでのIphone5Cでのテザリ...
-
三菱製 シリアルコミュニケー...
-
TCP/IPのデータ送受信の"確実性...
-
配列内に通番(文字列)を挿入し...
-
ローカルプロキシの作り方を教...
-
セル、データグラム、パケット...
-
CD-Rのデータを破損してしまった。
-
パケットのフィルタリング
-
リピータHUBでコリジョンが認識...
-
インターネット データ送信監...
おすすめ情報