https://blog.csdn.net/Zach_z/article/details/80548423
基础部分之基础部分学习
LED
8种工作模式——输入模式
- 浮空输入:管脚什么都不接,浮空着
- 上拉输入:把电位拉高,拉到Vcc
- 下拉输入:把电平拉低
- 模拟输入:通过模数转换,转换成数字信号,应用ADC模拟输入,或低功耗下省电
8种工作模式——输出模式 - 开漏输出: IO输出0接GND,输出1悬空,其吸收电流的能力相对强
- 推挽输出:IO输出0-接GND,1-接VCC,可以输出高电平低电平,连接数字器件
- 复用功能推挽输出
- 复用功能开漏输出:GPIO口被用作第二功能时的配置
LED原理
- 通过一个锁存器控制,使能引脚为PD2
- PC8-PC15对应LED1-LED8
- PC8-PC15同时服用与LCD显示屏数据的高8位
LED函数
引脚写入函数
HAL_GPIO_WritePin() 点亮某个灯
反转引脚状态
HAL_GPIO_TogglePin (GPIOC,GPIO_PIN_8)
寄存器
GPIOx_BSRR是一个32位置位复位寄存器
GPIO_ODR是一个数据输出寄存器
HAL库的使用
stm32g4xxx_hal_gpio.h这类文件里可找到可操作的库函数,stm32cubeMX可直接生成
按键和蜂鸣器
有源蜂鸣器,将直流转换为具有一定周期的脉冲
PB3低电平,蜂鸣器响
按键
stm32g4xx_hal_gpio.h中有对GPIO进行操作的一些函数
- HAL_GPIO_ReadPin 读取GPIO口状态
按键消抖
延时5到10毫秒
注意程序一定要写在while(1)里面,不然起不了作用啊。。。。
if(key==GPIO_PIN_RESET)
{
HAL_DELAY(10);
if(key==GPIO_PIN_RESET)
{
执行操作
}
}
长按检测
stm32g4xx_it_c定义了各种中断函数
LCD9325
262,144色单芯片SoC驱动,分辨率:240RGB*320点
16位数据通信,PC0-PC15
- 该LCD有10行(Line0–Line9),20列。每一个方格的像素是24*16
生成过程
比赛时会提供LCD的驱动代码和例程,因此LCD的引脚初始化不用在STM32cube MX里完成,可以通过导入驱动代码实现
- 在stm32cubeMX里配好基本的时钟,生成一个project
- 在官方提供的驱动代码:lcd_hal_h,lcd_hal.c,fonts.h 添加到该工程中
- 在keil里 add files 加入lcd-hal.c文件,并在主文件中添加 lcd_hal.h的头文件
LCD的应用
考试要求 黑底白字
- LCD_Init():LCD的初始化
我们可以在lcd_hal.c文件中找到一些可使用的函数
LCD_DisplayStringLine(Line4 ,(unsigned char *)" Hello,world. ");
LCD_DisplayChar(120,120,0X51); //在指定位置显示一个字符
sprintf函数
我们怎么把从串口处读到的字符显示在显示屏上呢?----先初始化LCD,再借助sprintf和LCD_DisplayStringLine()函数
调用该函数需要添加 stdio.h头文件
sprintf((char*)str," Value:%d ", Num); //d或i:有符号十进制整数
sprintf((char*)str," Value:%i ", Num); //d或i:有符号十进制整数
sprintf((char*)str," Value:%x ", Num); //无符号十六进制整数
sprintf((char*)str," Value:%u%% ", Num); //无符号十进制整数
sprintf((char*)str," Value:%f ", dot); //十进制浮点数
sprintf((char*)str," Value:%0.2f ", dot); //十进制浮点数保留两位小数
sprintf((char*)str," Value:%E ", dou); //使用 E 字符的科学科学记数法(尾数和指数)
sprintf((char*)str," Value:%0.2f ABC ", dot); //
sprintf((char*)str," Value:%d==%0.2f A ", Num,dot); //多个数据
sprintf((char*)str," Value:%d ", Num);
LCD_DisplayStringLine(Line8,str)