本帖最后由 dianhang 于 2016-8-20 23:27 编辑
一. 通过NUCLEO-F767ZI的adc采集电压值,用SPI的方式驱动0.96 寸 OLED显示电压值。
二. 方法步骤。
1.我手里的oled是采用spi的方式驱动的
(1)模块原理图
(2)管脚说明
GND 电源地
VCC 电源正(3~5.5V)
D0 OLED 的 D0 脚,在 SPI 和 IIC 通信中为时钟管脚
D1 OLED 的 D1 脚,在 SPI 和 IIC 通信中为数据管脚
RES OLED 的 RES#脚,用来复位(低电平复位)
DC OLED 的 D/C#E 脚,数据和命令控制管脚
CS OLED 的 CS#脚,也就是片选管脚
(3)单片机与OLED管脚连接方式
D0接PA5
D1接PD7
RST接PB10
DC接PB11
CS接PE15
2.通过STM32Cube建立工程
选择开发板
选择SPI和ADC通道
时钟配置
ADC配置
SPI配置
将下面文件添加到刚才新建的工程文件内
打开keil工程将刚才的文件添加到工程
3.编程
#include "stm32f7xx_hal.h"
#include "adc.h"
#include "spi.h"
#include "gpio.h"
/* USER CODE BEGIN Includes */
#include "oled.h"
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint16_t ADC_Value;
float ADC_ValueLocal;
uint8_t ADC_Value1;
uint8_t showBuffer[32];
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void Error_Handler(void);
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
MX_SPI1_Init();
/* USER CODE BEGIN 2 */
OLED_Init(); //初始化oled
OLED_Clear();
sprintf((char*)showBuffer,"bbs.21ic.com");
OLED_ShowString(0,0,showBuffer);
sprintf((char*)showBuffer,"Nucleo-F767ZI");
OLED_ShowString(0,2,showBuffer);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 500);
if ((HAL_ADC_GetState(&hadc1) & HAL_ADC_STATE_REG_EOC) == HAL_ADC_STATE_REG_EOC);
{
ADC_Value = HAL_ADC_GetValue(&hadc1);
ADC_ValueLocal =ADC_Value*3.3/4096;
}
sprintf((char*)showBuffer,"Voltage:%1.3f V",ADC_ValueLocal);
OLED_ShowString(0,4,showBuffer); //显示电压
HAL_Delay(500);
HAL_GPIO_TogglePin(LD3_GPIO_Port,LD3_Pin);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
三、显示效果
把ADC通道PB0接到3.3V电源上
oled.zip
(6.96 KB)
|