STM32G031とI2Cを使い0x40(8ビット表記0x80)に「hello...」と出力する。(Arduino)(ライブラリー化)
目的
I2Cのテスト
I2C->USART9600bps->USBのテスト
STM32-I2C-USART
STM32G031 I2Cシリアル変換
STM32G031とVSCode+STM32CubeでI2Cスレーブの受信文字をシリアル出力(受信)(STM32-I2C-USART)(CH340N)
メインプログラム
//I2C_OUT_0X80_MAIN_031_1
#include <Arduino.h>
#include <Wire.h>
#include "I2C_OUT_0X80_031_1.h"
//初期化
void setup()
{
//i2cの初期化
pc.beginNS(9600);
} //setup
//メインループ
void loop()
{
//データの表示
pc.printNS("HELLO WORLD\r\n");
//4桁の値の表示
pc.printNS(1234);
//リターン
pc.printNS("\r\n");
//1秒の待ち
delay(1000);
} //loop
I2C_OUT_0X80_031_1.hのプログラム
#ifndef TEST_H
#define TEST_H
//I2C_OUT_0X80_031_1
//10の割り算 0から1028までは、正しい。主に0から999
#define DIV10(n) ((n*205)>>11)
char ch_hex_a_b[16];
char *ch_hex_a(int x)
{
ch_hex_a_b[4] = 0;
if ( x >= 9000 ) {x = x - 9000; ch_hex_a_b[0] = '9';
} else if( x >= 8000 ) {x = x - 8000; ch_hex_a_b[0] = '8';
} else if( x >= 7000 ) {x = x - 7000; ch_hex_a_b[0] = '7';
} else if( x >= 6000 ) {x = x - 6000; ch_hex_a_b[0] = '6';
} else if( x >= 5000 ) {x = x - 5000; ch_hex_a_b[0] = '5';
} else if( x >= 4000 ) {x = x - 4000; ch_hex_a_b[0] = '4';
} else if( x >= 3000 ) {x = x - 3000; ch_hex_a_b[0] = '3';
} else if( x >= 2000 ) {x = x - 2000; ch_hex_a_b[0] = '2';
} else if( x >= 1000 ) {x = x - 1000; ch_hex_a_b[0] = '1';
} else { ch_hex_a_b[0] = '0';
}//if
ch_hex_a_b[3] = '0' + ( x - (DIV10(x) * 10) ); // 3 <- 120 - 123
x = DIV10(x); // 12 <= 123 / 10
ch_hex_a_b[2] = '0' + ( x - (DIV10(x) * 10) ); // 2 <- 12 - 10
ch_hex_a_b[1] = '0' + DIV10(x); // 1 <- 12 / 10
return(ch_hex_a_b);
} //ch_hex_a
//クラスの定義
struct _pc
{
void beginNS(int sp); //メソッドの宣言
int putcNS(char ch); //メソッドの宣言
int printNS(char *str1); //メソッドの宣言
int printNS(int num); //メソッドの宣言 オーバーロード
};
#define ADDR1 0x40
//STM32G031J6M6 i2cピンの定義
#define sdaPin PA12 // ArduinoA4
#define sclPin PA11 // ArduinoA5
//ポートをhiにする 初期化
//メソッドの定義
void _pc::beginNS(int sp)
{
//i2cの初期化
Wire.begin(sdaPin, sclPin); //STM32G031J6M6
}
//仮想シリアルへの一文字出力 9600bps
//メソッドの定義
int _pc::putcNS(char ch)
{
//I2Cに送信
Wire.beginTransmission(ADDR1);
Wire.write( ch );
Wire.endTransmission();
delay(1);//連続送信防止の為に1ms待つ
//戻り値
return (0);
}
//文字列の表示
//メソッドの定義
int _pc::printNS(char *str1)
{
//文字の中身がゼロか
while (*str1) {
//一文字出力
putcNS(*str1 ++);
} //while
//戻り値
return (0);
}
//文字列の表示 オーバーロード 4桁
//メソッドの定義
int _pc::printNS(int num)
{
if(num < 0) { putcNS('-'); num = 0 - num; }
char *str1 = ch_hex_a(num);
//文字の中身がゼロか
while (*str1) {
//一文字出力
putcNS(*str1 ++);
} //while
//戻り値
return (0);
}
//実体の作成
_pc pc;
#endif
Author And Source
この問題について(STM32G031とI2Cを使い0x40(8ビット表記0x80)に「hello...」と出力する。(Arduino)(ライブラリー化)), 我々は、より多くの情報をここで見つけました https://qiita.com/caa45040/items/9c99bd7c3e71571b0944著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .