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

[复制链接]
 楼主| dianhang 发表于 2016-8-20 23:18 | 显示全部楼层 |阅读模式
本帖最后由 dianhang 于 2016-8-20 23:27 编辑

一. 通过NUCLEO-F767ZI的adc采集电压值,用SPI的方式驱动0.96 寸 OLED显示电压值。
二. 方法步骤。
1.我手里的oled是采用spi的方式驱动的
(1)模块原理图
Image 021.jpg
(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建立工程
选择开发板
Image 022.jpg

选择SPI和ADC通道
Image 023.jpg
Image 024.jpg

时钟配置
Image 026.jpg

ADC配置
Image 028.jpg

SPI配置
Image 027.jpg

将下面文件添加到刚才新建的工程文件内
Image 029.jpg

打开keil工程将刚才的文件添加到工程
Image 030.jpg
3.编程

  1. #include "stm32f7xx_hal.h"
  2. #include "adc.h"
  3. #include "spi.h"
  4. #include "gpio.h"

  5. /* USER CODE BEGIN Includes */
  6. #include "oled.h"

  7. /* USER CODE END Includes */

  8. /* Private variables ---------------------------------------------------------*/

  9. /* USER CODE BEGIN PV */
  10. /* Private variables ---------------------------------------------------------*/
  11. uint16_t ADC_Value;
  12. float ADC_ValueLocal;
  13. uint8_t ADC_Value1;
  14. uint8_t showBuffer[32];
  15. /* USER CODE END PV */

  16. /* Private function prototypes -----------------------------------------------*/
  17. void SystemClock_Config(void);
  18. void Error_Handler(void);

  19. /* USER CODE BEGIN PFP */
  20. /* Private function prototypes -----------------------------------------------*/

  21. /* USER CODE END PFP */

  22. /* USER CODE BEGIN 0 */

  23. /* USER CODE END 0 */

  24. int main(void)
  25. {

  26.   /* USER CODE BEGIN 1 */

  27.   /* USER CODE END 1 */

  28.   /* MCU Configuration----------------------------------------------------------*/

  29.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  30.   HAL_Init();

  31.   /* Configure the system clock */
  32.   SystemClock_Config();

  33.   /* Initialize all configured peripherals */
  34.   MX_GPIO_Init();
  35.   MX_ADC1_Init();
  36.   MX_SPI1_Init();

  37.   /* USER CODE BEGIN 2 */
  38.         OLED_Init();  //初始化oled
  39.         OLED_Clear();
  40.         sprintf((char*)showBuffer,"bbs.21ic.com");
  41.         OLED_ShowString(0,0,showBuffer);
  42.         
  43.         sprintf((char*)showBuffer,"Nucleo-F767ZI");
  44.         OLED_ShowString(0,2,showBuffer);
  45.   /* USER CODE END 2 */

  46.   /* Infinite loop */
  47.   /* USER CODE BEGIN WHILE */
  48.   while (1)
  49.   {
  50.   /* USER CODE END WHILE */
  51.                
  52.                 HAL_ADC_Start(&hadc1);
  53.          
  54.           HAL_ADC_PollForConversion(&hadc1, 500);
  55.      
  56.     if ((HAL_ADC_GetState(&hadc1) & HAL_ADC_STATE_REG_EOC) == HAL_ADC_STATE_REG_EOC);
  57.      {
  58.                                 ADC_Value = HAL_ADC_GetValue(&hadc1);
  59.                                 ADC_ValueLocal =ADC_Value*3.3/4096;
  60.                         }               
  61.                 sprintf((char*)showBuffer,"Voltage:%1.3f V",ADC_ValueLocal);
  62.                 OLED_ShowString(0,4,showBuffer);           //显示电压
  63.                 HAL_Delay(500);               
  64.                 HAL_GPIO_TogglePin(LD3_GPIO_Port,LD3_Pin);
  65.   /* USER CODE BEGIN 3 */

  66.   }
  67.   /* USER CODE END 3 */

  68. }

三、显示效果
把ADC通道PB0接到3.3V电源上
Image 031.jpg


oled.zip (6.96 KB, 下载次数: 18)
serialworld 发表于 2016-8-21 07:11 | 显示全部楼层
谢谢分享,有空我也试试!
xiaohu507 发表于 2016-8-28 01:09 | 显示全部楼层
用printf函数显示mpu9250的采集值行不??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

273

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

37

主题

273

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部