本帖最后由 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, 下载次数: 18)
|