系统框架


使用标注库
加入启动文件

添加文件路径

创建main函数



添加标注库


GPIO输入输出




按键消抖

中断


设置顺序为:RCC-AFIO-EXTI-NVIC




每个中断函数都有固定的中断名称

触发一个中断都会置为一个中断标志


定时器

RCCAPB1->选择内部时钟->时基单元->中断控制ITconfig->NVIC->运行控制cmd


T= 1/f
72MHz/7200=10kHz=10000Hz,去倒数得到时间(一次就是0.0001s),记10000次,就是1s

跟外部中断一样每个时间函数都有固定的名称



比较模式(PWM)OC

RCCAPB1->选择内部时钟->时基单元->CCR->GPIO->cmd启动



在线设置CCR的寄存值需要通过TIM_SetCompare来修改





正转由快到慢反转由慢到快



GPIO口的输出模式要选择复用推挽输出模式
引脚重映射


输入捕获IC

GPIO->IC捕获单元->时基单元->从模式触发源选择->从模式设置->cmd启动


编码器

GPIO->IC->encod编码器->时基单元->cmd启动
cnt计数由编码器控制不需要开启Tim3时钟及TIM_InternalClockConfig





ADC数模转换


GPIO->ADC->ADC时钟分频->ADC通道选择和采样时间->ADCInit模式配置->ADCcmd








DMA数据转运

AHB->DMAInit->AMDcmd


DMA和ADC多通道数据转运


通讯接口
https://blog.csdn.net/qq_52608074/article/details/122297014
串口通讯




GPIO->USARTInit->CMD

CRT流控


重定义fputc函数->printf底层函数使其输出到tx端口


中文编译报错


--no-multibyte-chars
接受字符串(手动接收)

自动中断接收

接收包数据

I2C
第一个传输数据要为接受方的id+一个读写位




第二个数据可以为指针位









MPU6050
#ifndef __MPU6050_RAG_H
#define __MPU6050_RAG_H
#define MPU6050_SMPLRT_DIV 0x19
#define MPU6050_CONFIG 0x1A
#define MPU6050_GYRO_CONFIG 0x1B
#define MPU6050_ACCEL_CONFIG 0x1C
#define MPU6050_ACCEL_XOUT_H 0x3B
#define MPU6050_ACCEL_XOUT_L 0x3C
#define MPU6050_ACCEL_YOUT_H 0x3D
#define MPU6050_ACCEL_YOUT_L 0x3E
#define MPU6050_ACCEL_ZOUT_H 0x3F
#define MPU6050_ACCEL_ZOUT_L 0x40
#define MPU6050_TEMP_OUT_H 0x41
#define MPU6050_TEMP_OUT_L 0x42
#define MPU6050_GYRO_XOUT_H 0x43
#define MPU6050_GYRO_XOUT_L 0x44
#define MPU6050_GYRO_YOUT_H 0x45
#define MPU6050_GYRO_YOUT_L 0x46
#define MPU6050_GYRO_ZOUT_H 0x47
#define MPU6050_GYRO_ZOUT_L 0x48
#define MPU6050_PWR_MGMT_1 0x6B
#define MPU6050_PWR_MGMT_2 0x6C
#define MPU6050_WHO_AM_I 0x75
#endif
| 寄存器地址 | 寄存器名称 | 关键参数 | 典型配置值 | 作用 |
|---|---|---|---|---|
| 0x6B | PWR_MGMT_1 | CLKSEL[2:0](时钟源)、SLEEP(休眠模式)、DEVICE_RESET(复位) | 0x01 | 解除休眠模式,选择X轴陀螺PLL时钟源 |
| 0x19 | SMPLRT_DIV | 采样分频因子(取值范围0-255) | 0x07 | 采样率=1kHz/(1+7)=125Hz |
| 0x1A | CONFIG | DLPF_CFG[2:0](数字低通滤波器带宽) | 0x03 | 设置低通滤波器带宽为5Hz,延迟19ms |
| 0x1B | GYRO_CONFIG | FS_SEL[1:0](陀螺仪量程:00=±250°/s,10=±1000°/s) | 0x10 | 设置陀螺仪量程为±1000°/s(灵敏度32.8 LSB/°/s) |
| 0x1C | ACCEL_CONFIG | AFS_SEL[1:0](加速度计量程:00=±2g,01=±4g) | 0x08 | 设置加速度计量程为±4g(灵敏度8192 LSB/g) |
| 0x3B-0x48 | 数据寄存器 | 加速度计(0x3B-0x40)、陀螺仪(0x43-0x48) | – | 存储16位原始数据(高字节在前,低字节在后) |
| 0x75 | WHO_AM_I | 固定返回值0x68 | – | 验证设备连接状态 |
SPI通信
https://blog.csdn.net/qq_52608074/article/details/122297014



CAN通讯




0帧+ID+读写帧+(扩展格式)+发送数据长度+数据+CRC校验+有没有人接收






PWR-BKP-备份寄存器
备份寄存器由
Vbat引脚为备用电源维持备份区域供电



RTC时钟

独立看门狗-窗口看门狗



