野火stm32h743xih6 touchgfx显示屏点亮(一)
STM32 CubeMX 无法将 STM32H7 的最大 CPU 频率设置为 480 MHz使用STM32CUBMX5.6移植touchGFX4.13
【SDRAM】STM32外扩SDRAM学习总结 + CubeMX设置教程
STM32CubeMX | 41 - 使用LTDC驱动TFT-LCD屏幕(RGB屏)
手把手教你制作TouchGFX的工程模板
其他问题
Cannot Load Flash Programming Algorithm !
stm32修改堆栈大小(堆栈空间不敷导致死机)
1. 选择调试下载方式
用STM32CubeMX工具选择好芯片后,在Trace and Debug里面选择下载调试方式。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMWIzNDAzMWNiMzc1MjUzNDE2MDg3NDYwZmIzNWNkMmEucG5n
2. 选择晶振和时基
在System Core里面设置晶振和时基
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMTcwZjE2MWFmZjZiMzk1Y2UxNjBhNjFjY2QzMmVhY2YucG5n
3.打开CRC检验
在Computing中打开CRC,勾选Activated即可。ST使用TouchGFX必须使能CRC。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZTc5Y2M1M2IwNDVhZDJjOWU5NTZkMDYzMzM5ZWY5M2UucG5n
4.使能DMA2D
在Multimedia中打开DMA2D,勾选Activated,并设置和使能DMA2D中断。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYzBkMDhmZjEyMmY0MDkzMjZkNmYzMjEwNDdjMzVmMzIucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNWU2ZTE1ZDYxMzQyNzA1ZjdlODRlMzBhNmMzMThkNjUucG5n
5.设置SDRAM
Connectivity中找到FCM,相关设置如图:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvOThjMzU2N2JlOTc3MjU1N2YzMjg3YWQ5ODBlM2E0YjQucG5n
下面的相关设置参考《野火29-电容触摸屏-触摸画板》的bsp_sdram.c文件中的 SDRAM_Init(void)函数内容举行设置。也可根据数据手册设置。额~~~我还不会看数据手册。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNGEzY2Q4OTNhYWMzMjllZGVjMzYwZjI1MTNiMmM0NjUucG5n
切记:必要对 SDRAM的片选信号和时钟使能信号举行重新设置,否则屏幕只能点亮,而不能正常显示touchgfx。 PH6引脚更改为FMC_SDNE1,PH7引脚更改为FMC_SDCKE1。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMDFlNzk4NTcwMDNjMTYwNTAwY2IyYjhjNGZiMTEyZjUucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYmI0ZWZjNTQzOWFkNGRkZmEyM2I5OGVmMWQ5ODYwNTkucG5n
7.设置LTDC
在Multimedia中选择LTDC,并使能LTDC中断。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYTkxYjZmMTg2MzM5OWY0YjRiNmZjMzY5MjYxYWE3ZjQucG5n
下面的相关设置参考《野火29-电容触摸屏-触摸画板》的bsp_lcd.c文件中的 LCD_PARAM_TypeDef lcd_param数组内容举行设置。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvY2Q5OWIzMTIwY2U0MTE2ZWFiNzU2NDRlNWI5ZGEwMmUucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvODA1MTAzMDg5NWFlNWUzYWNjMGEwNjkxNGU5ZGRmZjkucG5n
必要对LTDC的相关引脚重新手动设置,和原理图一一对应,这里使用RGB565,相关设置引脚如下
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMjM2YTM0ZmE2NDhlMmI5MTQzMWEwMjQ5MGZiYTE1YzUucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNzdmZTA1YTAwZGFiYWY0ODJlNDcxYzUzODk5YWZhYjcucG5n这里可参考手把手教你制作TouchGFX的工程模板 里面先容了触摸中断的引脚设置方式。本文未用到此方法,因为触摸中断已经在野火stm32h743xih6 touchgfx 添加触摸代码(二)的bsp_i2c_touch.h文件中定义。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYjA2NDJlMDA3ZTFlMzUwNDNiZGEyOGRjNWUwOWJjZDEucG5n
显示屏背光设置
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMmNjYTQxOGZmOTQ3ZWY0ZDZkY2E1NjkzNGIyODllMzQucG5n
8.检查相关中断是否开启
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNWRiYTYzMzU3MGIxYjU3ZWM2MTljZjJhZDAzNzI5MDIucG5n
9.设置FREERTOS
在Middleware中选择CMSIS_V1
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMDU1Mjk4MDg4ZWQwODliMTFhMDc0MmRiYmU0YzhkYzcucG5nhttps://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZTZhNjJlOTZkM2JiOWIyNGRiNTRjMjg0OGM0NmE1MTIucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNDllZjJlOWQyM2JhMjQ2NjBjZDQ2NGRhODc3MjAyMWMucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNTFkZmM0NTIyNTc5NTU4ZTJlNWEwMTZlODRhYThkN2QucG5n
10设置touchgfx
在Software packs中设置 touchgfx
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMDhiN2RkYjA3ZmVhNzcwZTE5NjNiZDcwNjg2ZTc3Y2UucG5n
11.设置时钟
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNzI2MTA3YWY3NzY2Yjk1ODQxYzFjMTZlZmI0MjViMzYucG5n
野火七寸屏最大时钟33Mhz,FMC最大支持240Mhz
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZmFhNDA2YmE0NjYxNjgzOWEwNTMzZTZjMGZmZTRlNzYucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNWExODg0NjQ0ZDJlMGJmMzM0ZTU4ZTg2ZTljYjVhZmYucG5n
12.天生工程
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNTQwMzE4Zjk2N2M2YWU0OGIwYjM1MjZiYmViZGIxOWEucG5n
13.先使用touchgfx designer工具设置GUI
步骤12完成后直接打开mdk工程会报错
在STM32cubemx天生的文件夹下的TouchGFX中打开ApplicationTemplate.touchgfx.part设置GUI界面。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNGNmYTdhYWVlM2ZhMzhjZGM5NWZjNTI2ZTg2OTU3NDQucG5n
14.添加SDRAM相关代码
在main.c中添加SDRAM的相关代码
/**
* @briefFMC SDRAM 模式配置的寄存器相关定义
*/
#define SDRAM_SIZE 0x4000000//64M字节,两片W9825G6KH-6,32MB@16bit组成64M@32bit
/*SDRAM 的bank选择*/
#define FMC_BANK_SDRAM FMC_Bank2_SDRAM
#define FMC_COMMAND_TARGET_BANK FMC_SDRAM_CMD_TARGET_BANK2
#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001)
#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002)
#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004)
#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008)
#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020)
#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030)
#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000)
#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000)
#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200)
#define SDRAM_TIMEOUT ((uint32_t)0xFFFF)
static FMC_SDRAM_CommandTypeDef Command;
static void MX_SDRAM_InitEx(void); //函数声明
static void SDRAM_delay(__IO uint32_t nCount)
{
__IO uint32_t index = 0;
for(index = (100000 * nCount); index != 0; index--)
{
}
}
static void MX_SDRAM_InitEx(void)
{
uint32_t tmpr = 0;
/* Step 1 ----------------------------------------------------------------*/
/* 配置命令:开启提供给SDRAM的时钟 */
Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
Command.AutoRefreshNumber = 1;
Command.ModeRegisterDefinition = 0;
/* 发送配置命令 */
HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
/* Step 2: 延时100us */
SDRAM_delay(1);
/* Step 3 ----------------------------------------------------------------*/
/* 配置命令:对所有的bank预充电 */
Command.CommandMode = FMC_SDRAM_CMD_PALL;
Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
Command.AutoRefreshNumber = 1;
Command.ModeRegisterDefinition = 0;
/* 发送配置命令 */
HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
/* Step 4 ----------------------------------------------------------------*/
/* 配置命令:自动刷新 */
Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
Command.AutoRefreshNumber = 8;
Command.ModeRegisterDefinition = 0;
/* 发送配置命令 */
HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
/* Step 5 ----------------------------------------------------------------*/
/* 设置sdram寄存器配置 */
tmpr = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 |
SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |
SDRAM_MODEREG_CAS_LATENCY_3 |
SDRAM_MODEREG_OPERATING_MODE_STANDARD |
SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
/* 配置命令:设置SDRAM寄存器 */
Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
Command.CommandTarget = FMC_COMMAND_TARGET_BANK;
Command.AutoRefreshNumber = 1;
Command.ModeRegisterDefinition = tmpr;
/* 发送配置命令 */
HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
/* Step 6 ----------------------------------------------------------------*/
/* 设置刷新计数器 */
/* 刷新周期=64ms/8192行=7.8125us */
/* COUNT=(7.8125us x Freq) - 20 */
/* 设置自刷新速率 */
HAL_SDRAM_ProgramRefreshRate(&hsdram1, 824);
}
在main.c的static void MX_FMC_Init(void)函数中调用MX_SDRAM_InitEx()函数
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMDYxNDkxMzA5NDYwMWYwNjQ2OTI0ZjBhNGM4NGY0YzYucG5n
在main.c的void StartDefaultTask(void const * argument)函数中调用MX_TouchGFX_Process()函数,
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvY2ViY2U5MGQ4YmY5NTMyZWE3YzNlMzM1NWViMWU1MDAucG5n
到这里,屏幕可以正常显示touchgfx的内容。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNjFhZGNjMjIwYzZjZjY0ZTY2ZmQ2YzQ3N2NmODE3ZmUuanBlZw==
关于Software Packs选项找不到的解决办法:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZTJiMGVjMWJkYTllMGU3ODc0NDQyODZjYmQzMDYwOWUucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYmI0YmI5ODU2ZjhkMDYyNWRjZGY4YTA5OTM1ZWM5MDgucG5n
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]