最近第十五届蓝桥杯也即将开始比赛了,我这边也收到了蓝桥杯官方提供的竞赛平台(虽然要还回去可恶真小气)
其板载DAP下载器,两路电压采集,两路频率输出,这里的频率输出由555定时器提供以及按钮和部分引出IO。
从官网中下载了嵌入式赛道的资料。
首先最最关心的还是屏幕问题。
资料中提供了HAL库和LL库的驱动,标准库玩家直呼退赛,但是没有提供相关CubeMX工程。 因此本期我们将实现CubeMX的配置与各功能的移植。
首先我们在CubeMX中找到STM32G431R8T6,找到我们的板子型号。
由于原理图中 没有看到相关的低速晶振 ,那么在RCC配置中我们只需要选择高速晶振旁路时钟源。
并且由于原理图中,驱动LCD利用了并口操作,使用了整组PC端口进行数据的写入,因此我们需要将相关的IO口全部配置为输出,并且将所有可配置端口设置为高速模式。
之后调整好时钟源,我们生成我们的代码。
在LCD_Init函数中,我们可以将IO初始化的内容注释掉,这部分在CubeMX中已经完成了初始化。
LCD_Init();//LCD初始化 HAL_Delay(100);//等待初始化成功 LCD_SetBackColor(Black);//设置背景为黑色 LCD_SetTextColor(White);//设置字体颜色为白色 LCD_Clear(Black);//黑色填充 HAL_Delay(100);//等待
LCD_DisplayStringLine(Line4, (unsigned char *)" Hello,world. ");//输出Hello World HAL_Delay(1000);//等待
在While前输入以上代码,我们即可实现在LCD中打印黑底白字的Hello World.
I2C设备使用
在原理图中我们可以看到其由M24C02以及MCP4017两个I2C设备
M24C02是一款EEPROM存储器 ,即电可擦可编程只读存储器。它采用串行I²C接口,存储容量为2Kbit,组织为256 x
8位。其工作电压范围为2.5~5.5V,最大时钟频率为400kHz。M24C02支持总线控制,通过驱动地址可以完成设备的选定及写入/读取控制。该芯片具有字节写入和片写入两种写入模式,可以方便地向EEPROM中写入数据。
MCP4017是一款可编程电阻 ,它内置了7位寄存器,提供了多种电阻调节功能。
但是其IO PB6/7并没有硬件I2C的功能,因此我们需要用软件模拟I2C。
将PB6和PB7设置为输出模式,这里需要开漏输出,推挽输出会导致IO烧毁,具体可以看看之前的文章,关于开漏和推挽输出的区别。
详细解析STM32中GPIO有四种模式
这里也不需要上拉电阻,因为原理图中板载上拉电阻了。 启动电平需要设置为高电平,高电平代表I2C设备空闲状态。 **
还有需要注意的是,GPIO设置为开漏输出是可以读取总线电平的,这个细节可能很多人不知道。 **
我们编程完我们的24C02的代码。
-
char s[] = {‘1′,’2′,’3′,’4′,’5’}; char Data[5] = {‘0’};
定义一组待写入的数据和待会存放数据的缓存区。
for(unsigned char i = 1;i<=255;i++) { M24C02_Write(i,i%10+'0');//写入数据 c = M24C02_Read(i); LCD_DisplayChar(1,1,c); HAL_Delay(1000); LCD_Clear(Black);//黑色填充 }
我们写段代码测试一下。