有一种程序卡在BKPT上的情况,然后我搜索了下是仿真可以运行但是不调试就死机。
这是别人的回答。
这种卡在BKPT上的情况,如果是硬件仿真,多点几次运行,是可以跑起来的,很奇怪。我点三次运行程序就可以跑起来了,但是离线是跑不起来的。
出现这样的情况主要是堆栈分配,我看之前的STM32的墨水瓶代码堆栈分配了超级大。
搞这么大主要是其用了malloc分配一些数组空间。
这不是重点,我们可以不采用这种方法。主要是我移植了之后,屏幕完全没反应,这个就比较奇怪了。
主要我在设置io口为输入模式时这里一种不过,电平一直为高的。不像我在STM32运行时,会变低。
void sEPD_IO_DeInit(void)
{
GPIO_InitType GPIO_InitStructure;
SPI_InitType SPI_InitStructure;
GPIO_InitStruct(&GPIO_InitStructure);
/*!< sFLASH_SPI_CS_GPIO, sFLASH_SPI_MOSI_GPIO, sFLASH_SPI_MISO_GPIO
and sFLASH_SPI_SCK_GPIO Periph clock enable */
RCC_EnableAPB2PeriphClk(
RCC_APB2_PERIPH_GPIOA|RCC_APB2_PERIPH_GPIOB, ENABLE);
/*!< sFLASH_SPI Periph clock enable */
RCC_EnableAPB2PeriphClk(sEPD_SPI_CLK|RCC_APB2_PERIPH_AFIO, ENABLE);
/*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */
GPIO_InitStructure.Pin = sEPD_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(sEPD_CS_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.Pin = RST_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.Pin = DC_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.Pin = BUSY_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Input;
GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
/*!< Configure sFLASH_SPI pins: SCK */
GPIO_InitStructure.Pin = sEPD_SPI_SCK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF0_SPI1;
GPIO_InitPeripheral(sEPD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
/*!< Configure sFLASH_SPI pins: MOSI */
GPIO_InitStructure.Pin = sEPD_SPI_MOSI_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF0_SPI1;
GPIO_InitPeripheral(sEPD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
/*!< Configure sFLASH_SPI pins: MISO */
GPIO_InitStructure.Pin = sEPD_SPI_MISO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Input;
GPIO_InitPeripheral(sEPD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
SPI_InitStructure.DataDirection = SPI_DIR_DOUBLELINE_FULLDUPLEX;
SPI_InitStructure.SpiMode = SPI_MODE_MASTER;
SPI_InitStructure.DataLen = SPI_DATA_SIZE_8BITS;
SPI_InitStructure.CLKPOL = SPI_CLKPOL_LOW;
SPI_InitStructure.CLKPHA = SPI_CLKPHA_FIRST_EDGE;
SPI_InitStructure.NSS = SPI_NSS_SOFT;
SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_32;
SPI_InitStructure.FirstBit = SPI_FB_MSB;
SPI_InitStructure.CRCPoly = 7;
SPI_Init(sEPD_SPI, &SPI_InitStructure);
/*!< Enable the sFLASH_SPI */
SPI_Enable(sEPD_SPI, ENABLE);
}
这是我的配置函数,SPI这边没问题,只要那个读取忙过去,这边发送我用逻辑分析仪看了全部是正确的。所以不知道是不是上面的IO配置出了问题。目前墨水屏暂时没有搞定。
|