#include "stm32c0xx.h"
#include <stdio.h>
#include <math.h>
// Пины для I2C
#define SDA_PIN 9 // PA9 (I2C SDA)
#define SCL_PIN 10 // PA10 (I2C SCL)
// Кнопка
#define BTN_PIN 3 // PA3 (цифровой вход)
// Глобальные переменные
float roll = 0, pitch = 0, yaw = 0;
uint8_t update_flag = 0;
// Функции
void init_gpio(void);
void init_i2c(void);
void read_mpu6050(float *roll, float *pitch, float *yaw);
void delay_ms(uint32_t ms);
int main(void) {
init_gpio();
init_i2c();
while (1) {
if (!(GPIOA->IDR & (1 << BTN_PIN))) {
read_mpu6050(&roll, &pitch, &yaw);
delay_ms(200);
}
}
}
// Инициализация GPIO (кнопка)
void init_gpio(void) {
RCC->IOPENR |= (1 << 0); // Включаем тактирование GPIOA
// Настраиваем кнопку как вход с Pull-Up
GPIOA->MODER &= ~(3 << (BTN_PIN * 2)); // Вход (00)
GPIOA->PUPDR |= (1 << (BTN_PIN * 2)); // Включаем Pull-Up (01)
}
// Инициализация I2C (MPU6050 и OLED)
void init_i2c(void) {
RCC->APBENR1 |= RCC_APBENR1_I2C1EN;
I2C1->TIMINGR = 0x00303D5B; // Частота 100 кГц
I2C1->CR1 |= I2C_CR1_PE; // Включаем I2C
}
// Читаем данные с MPU6050
void read_mpu6050(float *roll, float *pitch, float *yaw) {
//
}
// Функция задержки
void delay_ms(uint32_t ms) {
for (volatile uint32_t i = 0; i < ms * 500; i++);
}