stm32f103zet6使用STM32CubeMx移植原子fsmc(有讲解)
本次使用原子stm32f103zet64.3寸mcu屏学了原子的例程发现虽然是hal库开发但是并没有使用stm32cubemx开发而是纯库函数我之前的工程都是基于cubemx所以我想进行适配现在把移植过程罗列如下有问题可以评论区问我stm32f4和stm32f1虽然一个fmc一个fsmc但是要移植都是一样的只是引脚不同首先打开cubemx创建工程这个我就不演示了网上大把教程然后我们开始配置时钟按照图中修改即可然后是fsmc配置1、fsmc一共四个块本次驱动lcd屏选择bank1也只能选bank1一共块中又分为4个区一个区64M这里只是相当于一个片选信号理论上选哪个都没问题但是开发板上为PG12刚好对应了FSMC_NE4所以选这个2、内存类型选择LCD接口3、LCD Register Select这个为RS引脚理论上也是0-25随便选一个开发板上已经定死了为PG12刚好对应A104、数据格式为16位因为这块屏位RGB565格式刚好16位然后是fsmc的寄存器配置1、内存类型位LCD接口类型2、Bank前面说了为第一个块3、Write operation是写使能肯定要使能4、Extended mode为拓展模式也就是下面要配置的读写时间参数是不复用的如果选择disable那他们就共用一套时间参数为了适配不同的屏选择Enable5、Address setup time in HCLK clock cycles地址建立时间地址信号稳定后到读信号OE拉低的等待时间。必须大于外部芯片要求的地址建立时间t_AVV否则地址没稳定就读取会导致数据错误6、Data setup time数据建立时间读信号拉低后到读取数据的等待时间。必须大于外部芯片的读取访问时间t_ACC否则芯片还没把数据放到总线上单片机就读取了数据会是错误的7、Bus turn around time总线周转时间读操作结束后到下一次写操作开始的等待时间用来避免总线冲突。比如读和写之间让总线电平有足够时间恢复稳定。这个参数不是很重要直接为0即可8、Access mode访问模式控制地址 / 数据信号的同步方式有 A/B/C/D 四种模式对应不同的信号有效时机比如地址和控制信号是同时有效还是地址先有效要和外部芯片的时序图匹配。目前是选择A模式9、Address setup time in HCLK clock cycles地址建立时间写操作时地址信号稳定后到写信号WE拉低的等待时间。匹配芯片写操作的地址建立要求。10、Data setup time数据建立时间写信号拉低后数据信号需要保持稳定的时间。必须大于外部芯片的写脉冲宽度t_WP否则数据还没被芯片锁存写操作就结束了会导致写失败。11、Bus turn around time总线周转时间写操作结束后到下一次读 / 写操作的总线恢复时间避免总线电平冲突。12、Access mode访问模式写操作的地址 / 数据同步模式可与读模式不同匹配芯片写操作的时序要求。在前面的配置之后系统会自动配置好对应的引脚如果跟着教程一步一步到这的引脚是可以和原子的开发板对应上的最后还要配置一个最重要的LCD_BL背光引脚其实不配置也许但是为了保证初始化都是在cubemx中进行所以在这里进行配置将PB0配置为推挽输出默认低电平即可高电平点亮时钟配置如下生成工程然后我们把原子的代码进行复制注意图中红框为我自定义的.h原来是没有的实现如下直接新建后复制即可#ifndef LCD_EX_H #define LCD_EX_H void lcd_ex_ili9341_reginit(void); void lcd_ex_ili9806_reginit(void); void lcd_ex_nt35310_reginit(void); void lcd_ex_nt35510_reginit(void); void lcd_ex_ssd1963_reginit(void); void lcd_ex_st7789_reginit(void); void lcd_ex_st7796_reginit(void); #endif我们新建文件夹BSP放在core同级目录在BSP内新建LCD文件夹后把刚刚几个文件全部放入即可然后把文件进行导入工程即可很基础的操作了我就不赘述了然后是设置新增的文件的路径跟着图片一步一步点击即可现在开始修改文件lcd.c最上面部分改的跟我图中一样即可主要是新增main.h和#include LCD/lcd_ex.c改为#include LCD/lcd_ex.h其他不动然后找到void lcd_init(void)函数把fsmc部分代码进行注释因为已经才cubemx进行注释背光的也要注释了lcd.h新增main.h头文件然后ctrlH找到delay_ms直接进行替换为HAL_Delay因为可以直接使用hal库自带的延时函数然后然后ctrlf找到delay_us函数我们对每一个us延时都手动替换为HAL_Delay(1);也可以自己使用定时器进行us延时函数实现最后是main函数直接添加上lcd.h头文件然后添加上lcd的初始化代码和显示函数后直接进行烧录即可最后也是成功完成驱动了
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2557896.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!