关于用立创天空星青春版开发freertos+fatfs的txt阅读器中遇到的问题

1.早期用cubemx配置的fatfs的代码总是没办法挂载fatfs文件系统,与我来说总共有两个原因:

第一个原因是cubemx中只能先配置四线的模式来初始化,但是四线太快了,需要自己写一个初始化函数来替代cubemx生成的MX_SDIO_SD_Init()函数

void MX_SDIO_SD_Initagain(void)
{
  hsd.Instance = SDIO;
  hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
  hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
  hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
  hsd.Init.BusWide = SDIO_BUS_WIDE_1B;  
  hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
  hsd.Init.ClockDiv = 118;  
  
  if (HAL_SD_Init(&hsd) != HAL_OK)
  {
    Error_Handler();
  }
	HAL_Delay(500);
  
  HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B);

}

这个代码是先用一线来初始化(SDIO_BUS_WIDE_1B),初始化完成后再改用四线(SDIO_BUS_WIDE_4B)

第二个原因就是使用的TF卡是从旧手机上拆下来的,需要格式化之后才可以搭载fatfs系统,这里的格式化是指用读卡器在电脑上格式化

2.第二个问题就是搭载上freertos和fatfs操作系统之后不能成功搭载fatfs系统,而卸掉freertos却可以搭载,说明问题出现在freertos上,原来是因为我给搭载fatfs的任务函数分配的栈空间太小了,我使用的是默认的128,修改成1024之后就可以正常搭载了,(但是我没有发现原因之前,没有把freertos操作系统卸掉,而是把他的在main.c文件里面的初始化代码和相关的代码都注释掉,这时候是没有使用freertos的,而是把搭载fatfs系统的代码放在主函数里面运行,也没办法搭载,可能是因为freertos同时把主函数的栈空间也压缩了,所以才失败)

3.第三个问题就是在解决完搭载系统之后调用读取SD卡根目录下的文件名并显示在lcd上无法显示,调试之后发现是在向sd卡中读取数据的时候超时了,但是在单独调用这个读取函数的时候却可以读取数据,说明不是硬件问题,后来翻阅资料,发现SDIO的中断要大于DMA的中断优先级

并且SDIO和DMA的优先级最好低于freertos的最大优先级,不然无法在freertos中正常使用,

但是更改之后还是无法正常显示。

最后终于在和AI的详细对答之后发现,在我上面说的读取SD卡根目录下的文件名并显示在lcd上的那个函数里面使用到了SDIO和DMA的中断,而我为了lcd显示函数更稳定一点就直接在这个函数上调用了taskENTER_CRITICAL和taskEXIT_CRITICAL,这两个函数构成了一个临界区,这个临界区内禁止中断,这样就妨碍了我获取信息的中断。

void cont_func(void *argument)
{
  /* USER CODE BEGIN cont_func */
  /* Infinite loop */
  for(;;)
  {
    xTaskNotifyWait(0,0,NULL,portMAX_DELAY);
		taskENTER_CRITICAL();
    fatfs_GetDiskInfo();
		taskEXIT_CRITICAL();
  }
  /* USER CODE END cont_func */
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值