硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1457|回复: 9
收起左侧

[emWin] 颓了,倒腾二代示波器的截图功能,排查到凌晨3点半,竟然是因为我用的最新的5.42版本问题

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107604
QQ
发表于 2018-1-13 03:41:24 | 显示全部楼层 |阅读模式
之前还以为是程序问题,各种调整程序,排查程序,排查SD卡,调整优化等级,最后没招了,换个库看看吧,竟然是MDK中带的新版5.42截图功能有bug。。。。。。


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107604
QQ
 楼主| 发表于 2018-1-13 03:52:40 来自手机 | 显示全部楼层
真是一口老血喷到屏幕上。
回复

使用道具 举报

32

主题

187

回帖

283

积分

高级会员

积分
283
发表于 2018-1-13 09:01:11 | 显示全部楼层
老师辛苦哇
回复

使用道具 举报

9

主题

161

回帖

188

积分

初级会员

积分
188
发表于 2018-1-13 10:08:29 | 显示全部楼层
哈哈,这问题最蛋疼,怀疑自己的问题,疯狂修改,就是没用,结果不是自己的问题
回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 2018-1-13 11:27:43 | 显示全部楼层
这种类似的问题我也遇到过.使用STM32F103,串口和LCD(FSMC)显示程序单独使用没什么问题,都正常,只要初始化串口后,屏幕就显示不正常.然后一直代码,找问题,没什么效果,一次偶然的机会,我把串口初始化放到液晶屏初始化后面.一切OK,到现在我都还是不知道为什么,后面的程序我都是先初始化FSMC后再初始化串口.后面使用的SPI3接口也遇到同样的问题.

void bsp_Init(void)
{
        /*
                由于ST固件库的启动文件已经执行了CPU系统时钟的初始化,所以不必再次重复配置系统时钟。
                启动文件配置了CPU主时钟频率、内部Flash访问速度和可选的外部SRAM FSMC初始化。
                系统时钟缺省配置为72MHz,如果需要更改,可以修改 system_stm32f10x.c 文件
        */
       
        /* 使能CRC校验, 用于开启STemWin的使用 */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
       
        /* 优先级分组设置为4,可配置0-15级抢占式优先级,0级子优先级,即不存在子优先级。*/
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
       
        bsp_InitDWT();                                       /* 初始化数据观察点与跟踪(DWT)模块*/
        bsp_InitLed();                                                  /* 初始LED指示灯端口 */
        bsp_InitKey();                                                 /* 初始化按键 */
        BEEP_InitHard();                                        /* 初始化蜂鸣器硬件*/
        bsp_InitSPIBus();                                        /* 配置SPI总线 ,主要配置SPI2接口,这个接口是SPIflash与TSC2046共用的*/
        bsp_InitSFlash();                                        /* 初始化SPI flash(GBK字库)*/
//        SPI_FLASH_Test();                                        /* SPI FLASH读写测试试验*/
        LCD_InitHard();                                            /* 初始化显示器硬件*/       
        bsp_InitUart();                                          /* 初始化串口 注意!!!要放在液晶屏初始化前面会死机*/
        bsp_InitSFRAM();                                        /* 初始化铁电存储器(保存参数)注意!!!要放在液晶屏初始化前面会死机*/
//        bsp_InitI2C();                                       /* 配置I2C总线 */
        TOUCH_InitHard();                                    /* 初始化触摸屏*/

        LCD_SetBackLight(BRIGHT_DEFAULT);        /* 打开液晶屏背光*/       
}
回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 2018-1-13 11:36:33 | 显示全部楼层
eric2013 发表于 2018-1-13 03:52
真是一口老血喷到屏幕上。

辛苦了,高手都这样.最近在学习emWin有很多问题还要向您学习请教.有时候我写程序写到怀疑人生!
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2018-1-13 11:46:08 | 显示全部楼层
小蜜蜂科技 发表于 2018-1-13 11:27
这种类似的问题我也遇到过.使用STM32F103,串口和LCD(FSMC)显示程序单独使用没什么问题,都正常,只要初始化串 ...

是不是串口初始化过程中修改了FSMC的设置,逐段屏蔽串口初始化语句,定位哪个语句引起的问题就可以找到原因了
回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 2018-1-13 11:58:11 | 显示全部楼层
ccc1122 发表于 2018-1-13 11:46
是不是串口初始化过程中修改了FSMC的设置,逐段屏蔽串口初始化语句,定位哪个语句引起的问题就可以找到原 ...

串口初始化都是网上通用的代码,没什么差别的.懒得去搞了.配置SPI3接口也出现这个问题,最后查找到只要不重新映射与配置SPI引脚就不会死机.但是不可能不配置呀.现在就这样用吧.
*********************************************************************************************************
*        函 数 名: fm25_CfgSpiHard
*        功能说明: 配置STM32内部SPI硬件的工作模式、速度等参数,用于访问SPI接口的串行FRAM。
*        形    参: 无
*        返 回 值: 无
*********************************************************************************************************
*/
static void fm25_CfgSpiHard(void)
{
        SPI_InitTypeDef  SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
       
        /* Enable SPI3 and GPIOB clocks */
        RCC_APB1PeriphClockCmd(FM25_RCC_SPI, ENABLE);                                                                         //SPI2 SPI3的时钟是由APB1分频得来,APB1最高为36M
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);

        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);                                                //把JTAG给禁止只用SWDP功能了。然后配置spi的io口 JTAG-DP 禁用 + SW-DP 使能
       
//        GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);                                                           //要使用PA14,PA14要把SWD调试禁用
//        // 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
       
        /* Configure SPI3 pins: SCK, MISO and MOSI */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3  |  GPIO_Pin_4  | GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        /* SPI3初始化配置*/
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                                  //主从模式选择,SCK信号有主机产生
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                                                         //SPI通信数据的大小
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                                                        //时钟极性
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                                                                   //时钟相位
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                                                          //片选信号,硬件模式还是软件模式
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;                        //SPI分频值,分频后的值为SCK的时钟频率 传输速度为36M/2=18MHz
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                                        //选择SPI通信时,是高位数据在前还是低位数据在前
        SPI_InitStructure.SPI_CRCPolynomial = 7;                                                                        //与CRC校验有关
        SPI_Init(FM25_SPIx, &SPI_InitStructure);

        /*使能SPI3 */
        SPI_Cmd(FM25_SPIx, ENABLE);       
}
回复

使用道具 举报

14

主题

109

回帖

151

积分

初级会员

积分
151
发表于 2018-1-15 09:10:26 | 显示全部楼层
本帖最后由 fswyt 于 2018-1-15 09:32 编辑
小蜜蜂科技 发表于 2018-1-13 11:27
这种类似的问题我也遇到过.使用STM32F103,串口和LCD(FSMC)显示程序单独使用没什么问题,都正常,只要初始化串 ...

哈哈,你这种类似的问题我也遇到过。你在外设初始化函数里,把外设初始化用的局部变量结构体给初始化下。
因为你这个外设用的结构体变量地址可能就上个外设结构体的地址哟!结构体没用到的一些参数不给他赋值,就可能是前一个外设留下的脏值。参考我刚发的一个帖子http://www.armbbs.cn/forum.php?m ... mp;extra=#pid116319


回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 2018-1-17 12:18:50 | 显示全部楼层
fswyt 发表于 2018-1-15 09:10
哈哈,你这种类似的问题我也遇到过。你在外设初始化函数里,把外设初始化用的局部变量结构体给初始化下。 ...

我测试了,没什么用,不知道问题出在哪里?

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-7 20:56 , Processed in 0.310292 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表