打印
[STM32F7]

【NUCLEO-F767ZI评测】oled显示电压值

[复制链接]
1571|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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)
沙发
serialworld| | 2016-8-21 07:11 | 只看该作者
谢谢分享,有空我也试试!

使用特权

评论回复
板凳
xiaohu507| | 2016-8-28 01:09 | 只看该作者
用printf函数显示mpu9250的采集值行不??

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

273

帖子

3

粉丝