蓝桥杯备赛1

本文详细介绍了STM32在蓝桥杯竞赛中的基础准备,涵盖了LED、按键、LCD9325、I2C、EEPROM、中断、定时器、串口通信、ADC和DAC等知识点。讲解了各模块的工作原理、初始化步骤及常用函数,为参赛者提供了全面的参考。
摘要由CSDN通过智能技术生成

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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值