#记录第四次蓝桥杯#
一、题目介绍
二、题目分析
2.1外设分析
通过对题目解读,一共会用到如下外设和资源:GPIO、OLED、LED、Lora模块、矩阵按键、电位器、继电器等。
软件层面需要使用到:定时器、中断、ADC
通信协议:IIC(OLED控制)、SPI(Lora通信)
2.2思路
我个人看到题目之后,是先从NODE.B开始编写的,除了Lora通信控制的部分,我是先写完NODE.B,再去写NODE.A的。先完成两个模块的一些基本功能(比如OLED显示、继电器控制、AD采集、按键等),最后再实现两边的通信。
三、CUBEMX配置
3.1控制器(NODE.A)
3.1.1引脚图
3.1.2时钟树
3.1.3定时器配置
3.1.4IIC配置
3.1.5 SPI配置
3.1.6 中断配置
定时器和外部中断设置好后,一定要记得使能(enable)
3.1.7GPIO配置
3.2采集器(NODE.B)
3.1.1引脚图
3.1.2ADC设置
ADC使用的是通道8和通道9
其余的配置同NODE.A一致,除了GPIO由于多了几个引脚可能配置不一样。
CUBEMX可能有些地方配置有些多余,这里仅供参考。
四、部分代码
这里只展示主函数部分,详细请看压缩包
4.1NODE.A
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "i2c.h"
#include "spi.h"
#include "tim.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "lora.h"
#include "oled.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
void key_check(void);
void lora_proc(void);
void oled_proc(void);
uint16_t Scan_Col1(void);
uint16_t Scan_Col2(void);
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
struct key{
uint8_t B1;
uint8_t B2;
uint8_t B4;
uint8_t B5;
}key1;
struct show{
float CV;
float PV;
uint8_t K1;
uint8_t K2;
u