STM32G031とVSCode+STM32CubeでI2Cスレーブの受信文字をシリアル出力(受信)(STM32-I2C-USART)(CH340N)


x 過去ログを見よ->

x I2C-UASRT コンバータ (STM32-I2C-USART)

x CubeMXは、stm32g031f6px
x VSCodeは、nucleo-g031
x プルアップ抵抗は、忘れずに

x ちょつとやる気が出てきたのでバイナリを何とかする予定 おわつた

目的
I2Cスレーブのテスト
I2Cは、PA11とPA12
シリアルは、9600bpsでPA2(4ピン)から出力

-o_con173

-o_con160

参考

I2C_SLAVE_TEST2_031_2のファイルを適当にコピー
I2C_SLAVE_TEST2_031_2_BINに実行用バイナリーがある

いろいろ
新規プログラムは、実質3行でほぼ設定ゲーである。
設定してボタンを押してようすを見るゲームの様だ。

-その3 215

-その4 o_con217

-218

-212

-262

-265-

-266-

-213

-214

-237

main内のwhile内





        //I2Cのアドレスの設定も忘れずに「hi2c2.Init.OwnAddress1 = 0x80;」

        uint8_t aRxBuffer[10] = {0};

        while (HAL_I2C_Slave_Receive(&hi2c2,aRxBuffer, 1, 1000) != HAL_OK) {};

        //LED ON debug
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
        //HAL_Delay(500); //debug


        //I2Cスレーブの受信データの表示
        HAL_UART_Transmit(&huart2,aRxBuffer, 1, 10);

        //I2Cスレーブの受信データの表示
        //HAL_UART_Transmit(&huart2, (uint8_t *)"\tRead A: ", 9, 10);
        //uint8_t n1  = '0' + (aRxBuffer[0] % 16);
        //uint8_t n10 = '0' + (aRxBuffer[0] / 16);
        //HAL_UART_Transmit(&huart2, &n10, 1, 10);
        //HAL_UART_Transmit(&huart2, &n1, 1, 10);
        //HAL_UART_Transmit(&huart2, (uint8_t *)"\r\n", 2, 10);

        //LED OFF debug
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
        //HAL_Delay(500); //debug




I2C内(忘れずに)




  hi2c2.Init.OwnAddress1 = 0x80;



STM32G31J6M6用 Aを連続出力




//I2C_A_031_1

#include <Arduino.h>
#include <Wire.h>

//STM32G031J6M6 i2cピンの定義
#define sdaPin PA12    // ArduinoA4
#define sclPin PA11    // ArduinoA5

#define en     PB7     // 1pin

#define ADDR1  0x40

//初期化
void setup() {

  delay(3000); //not Delete

  //GPIOの初期化
  pinMode(en, OUTPUT);

  //i2cの初期化
  Wire.begin(sdaPin, sclPin); //STM32G031J6M6

}//setup

//メインループ
void loop() {

  digitalWrite(en, 1); //LED ON debug

  //I2Cに送信
  Wire.beginTransmission(ADDR1);
  Wire.write('A');
  Wire.endTransmission();

  delay(500);//0.5秒待つ


  digitalWrite(en, 0); //LED OFF debug
  delay(500);//0.5秒待つ

}//loop




STM32G031J6M6 HELLO.. 表示



//I2C_HELLO_031_1

#include <Arduino.h>
#include <Wire.h>

//STM32G031J6M6 i2cピンの定義
#define sdaPin PA12    // ArduinoA4
#define sclPin PA11    // ArduinoA5

#define en     PB7     // 1pin

#define ADDR1  0x40

//文字列の表示 nana_seg
int ns_printf(char *str1)
{

  //文字の中身がゼロか
  while (*str1) {

    //I2Cに送信
    Wire.beginTransmission(ADDR1);
    Wire.write( *str1 ++  );
    Wire.endTransmission();

    delay(1);//連続送信防止の為に1ms待つ

  } //while

  //戻り値
  return (0);

}//ns_printf


//初期化
void setup() {

  delay(3000); //not Delete

  //GPIOの初期化
  pinMode(en, OUTPUT);

  //i2cの初期化
  Wire.begin(sdaPin, sclPin); //STM32G031J6M6

}//setup


//メインループ
void loop() {

  digitalWrite(en, 1); //LED ON debug

  //I2Cに文字列を出力
  ns_printf("hello world\r\n");

  delay(500);//0.5秒待つ


  digitalWrite(en, 0); //LED OFF debug
  delay(500);//0.5秒待つ

}//loop




資料

HALライブラリによるSTM32マイコンのUART機能使用方法