LoginSignup
0
0

More than 1 year has passed since last update.

STM32G031とDS1307で時計プログラム(ソフトウェアシリアル出力100bps)(HAL)

Last updated at Posted at 2022-08-11

STM32G031とDS1307で時計プログラム(ソフトウェアシリアル出力100bps)

x 過去ログを見よ
x PA_0をOBでGPIOに出来る人むけ
x STM32G031は、秋月で売っているSTM32G031J6M6の事

目的
秋月のDS1307ZN+T&R I-06950

o_con651.jpg

o_con652.jpg




//HAL_ds1307_S_SER_031_1

#include "mbed.h"


#define  TX_1()      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET)
#define  TX_0()      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET)

//仮想シリアルへの一文字出力 1000bps
// 10 100bps
//  5
//  2
//  1 1000bps
int pc_putc(char ch)
{
    TX_1();
    TX_0();//Start
    HAL_Delay(9);

    for(int ii=0; ii<8; ii++) { //Data x 8
        if(   ((ch>>ii)&1) == 0 ){TX_0();} else {TX_1();}
        HAL_Delay(9);
    }; //for

    TX_1();//Stop
    HAL_Delay(9);

    return(0);
} //pc_putc


int main() {

    __HAL_RCC_GPIOA_CLK_ENABLE();

    GPIO_InitTypeDef GPIO_InitStruct = {0};

    GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF6_I2C2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


    __HAL_RCC_I2C2_CLK_ENABLE();

    I2C_HandleTypeDef hi2c2;

    hi2c2.Instance = I2C2;
    hi2c2.Init.Timing = 0x10707DBC;
    hi2c2.Init.OwnAddress1 = 0;
    hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
    hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
    hi2c2.Init.OwnAddress2 = 0;
    hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
    hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
    hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
    HAL_I2C_Init(&hi2c2);    

    HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE);

    HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0);


    uint8_t data_read[7]; //リードバッファー
    uint8_t n1_8[8]; //バッファー

    while(1) {

//data_read[2] = 0x12;
//data_read[1] = 0x32;
//data_read[0] = 0x45;

        //時間の読み込み
        HAL_I2C_Master_Transmit(&hi2c2, (0xD0)     , (uint8_t*)"\000", 1, 3000);        
        HAL_I2C_Master_Receive( &hi2c2, (0xD0) | 1 , data_read,        7, 3000);

        //温度の表示
        pc_putc( '0'+(data_read[2] >> 4)  );
        pc_putc( '0'+(data_read[2] & 0xf) );
        pc_putc( '.' );
        pc_putc( '0'+(data_read[1] >> 4)  );
        pc_putc( '0'+(data_read[1] & 0xf) );
        pc_putc( '.' );
        pc_putc( '0'+(data_read[0] >> 4)  );
        pc_putc( '0'+(data_read[0] & 0xf) );
        pc_putc('\r');
        pc_putc('\n');

        // 1秒待つ
        HAL_Delay(10);
  
    }//while

}//main




0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0