文章目录
- 前言
- 一.新建工程
- 1.用CubeMx生成初始化代码
- 2.工程文件夹中的配置
- 3.keil5中的配置
- 4.用VSCode打开工程
- 二、LCD工程移植
- 通过lcd.c中的函数控制显示屏显示
前言
为了避免不必要的bug,建议大家尽可能使用最新版的CubeMx6.10(ST官网下载,网址:https://www.st.com/zh/development-tools/stm32cubemx.html)且keil5的版本尽量用5.33及以上.
一.新建工程
1.用CubeMx生成初始化代码
打开CubeMx,新建项目.
在搜索框中输入关键词G431GBT6,选择STM32G431RBT6.
选好芯片后点击开始项目.
进入芯片所在页面后首先点击项目管理,然后给工程起个名字,选择工程存放的位置,编译工具链选择MDK,最小版本建议选择5.32.
然后点击Code Generator,选择复制所需文件(加快初始化代码生成速度),为每一外设生成一对.c/.h文件(工程管理需要).
然后回到芯片所在页面,选择System Core.
由于外部时钟的精度比内部时钟的精度遥遥领先,因此我们选择使用外部时钟。
既然打开了外部时钟,自然要配置一下时钟设置。参考官方的配置,我们选择将外部时钟调整为24MHZ,选择器选择HSE(打开外部时钟输入通道让我们选择的时钟能作为时钟源输入)和PLL(此处相当于一个倍频器),修改HCLK为80MHZ后敲回车让CubeMx帮我们把其他参数配置好.
这一切配置完成以后,点击生成代码即可。
2.工程文件夹中的配置
这里建议提前在MDK-ARM文件夹的同一级文件目录下新建一个bsp文件夹用于存放外设驱动程序,并在其中新建Inc(用于存放外设驱动的.h文件)和Src(用于存放外设驱动的.c文件)文件夹.
3.keil5中的配置
用keil5打开新建好的工程(注:需先下好器件支持包),选择图标为扳手的工具.
将编码更改为GB2312(为了使一会移植的官方文件时不出现乱码的情况).
然后点击魔术棒工具.
将编译器选择为AC6(显著提升编译速度).
选择C/C++选项,将要用到的.h文件所在路径包含进入工程的搜索路径内.
点击Debug,选择烧录器为DAP,然后点击Settings.
点击Flash Download,点击Add添加STM32G4XX的128 Flash文件.
然后依次点击OK退出设置界面。至此完成了工程编译和烧录的配置工作,点击编译,编译成功后将电脑与开发板连接,开发板上电后点击烧录,检查编译和烧录是否正常。
4.用VSCode打开工程
VSCode中需先下载好EIDE插件.
下载好该插件后点击插件图标,选择导入项目(注:每次用CubeMx重新生成代码后,为了使得VSCode中的工作区代码与新生成的代码同步,都要再次导入项目).
进入对应的文件目录中选择目标文件后点击导入.
为方便工程文件管理,不要选择将工作区置于MDK-ARM目录下.
而是选择MDK-ARM文件夹所在的目录.
选择完毕后点击继续即可进入工作区.
这个时候回到资源管理器中会发现在对应的文件目录下生成了一个VSCode的工作区文件,关闭工程之后要重新打开工程,只需双击该文件即可.
双击打开工作区,点击EIDE插件图标,进入项目配置界面.
首先添加文件夹,从磁盘中选择刚刚新建好的bsp文件夹.
然后点击芯片支持包处的➕号,从磁盘中选择选手资料包中的器件支持包安上.
然后进一步确认是否为型号STM32G431RBTX的芯片支持包
接着点击构建配置,选择作为AC6编译器,同时别忘了右键编译器配置,填入AC6编译器所在路径(一般位于keil5中ARM中的ARMCLANG目录下).
然后点击RAM/FLASH中的编译按键.
检查RAM和ROM的相关地址设置是否如下图所示.
接下来是烧录器配置.
选择OpenOCD.
芯片配置中选择修改.
键入g4,选择stm32g4的cfg文件.
然后选择修改接口配置,选择dap-v1.
最后检查头文件包含目录中是否含有bsp文件夹中的Inc文件夹,若没有包含则点击➕进行添加。
至此,项目在VSCode工作区中的配置大功告成.
大家打开main.c文件后,可以点击编译和烧录试试效果.
注:如果烧录失败,则关掉板子上的电源,重新打开电源后,即可烧录;烧录时出现额外擦除的警告是正常的,不必理会.
二、LCD工程移植
在选手资料包(从官方下载)中,官方提供了LCD例程.
选择HAL库版本的驱动文件打开.
打开其中的Inc和Src文件,把Inc中的fonts.h和lcd.h文件放入bsp中的Inc中,把Src中的lcd.c文件放入bsp中的Src中.
然后我们在main.c中便可以使用lcd.c中定义的函数了,如下图所示.
当然,别忘记包含lcd.h的头文件和进行lcd初始化
然后编译下载一气呵成,试试效果吧.
通过lcd.c中的函数控制显示屏显示
1.清屏为对应颜色,如清屏为黑色.
LCD_Clear(black)
2.设置背景色,如设置背景色为黑色.
LCD_SetBackColor(Black);
3.设置前景色,如设置前景色为白色
LCD_SetTextColor(White);
4.在对应行的对应位置显示内容,如,在第一行(对应Line0)的第9—12列(1-8列为空格)显示test.
LCD_DisplayStringLine(Line0, (unsigned char*)" text");