【stm32】badapple播放心路例程

2 篇文章 0 订阅
1 篇文章 0 订阅

BADAPPLE_STM32_OLED,视频保存格式为C版本。

期末了,我现在还在搞单片机我也是佩服我自己。真不怕挂科了。

看到网上的大佬都能做到用STM32显示BADAPPLE在OLED上,本宝宝表示也想做一个。奈何资料太少,只能自己动手做一个

先用CUBEMX初始化SPI以及SDIO+FAFTS

将视频的每一帧转成数组,内容参考

https://www.bilibili.com/video/BV174411Z7qc

一共创建了6564个C文件,大小51.2M

image-20201119120708690

现在就是如何读取数组的问题

我的打算是用FATFS将数组的内容提取出来,赋值给TEMP数组,毕竟一个数组就只有128*64,stm32的内容RAM是够用。

现在的问题就是,我对FATFS系统不熟悉,所以不知道读出来的数组是否正确.

OLED显示

直接移植图形库,去结合HAL库,画了我一下午的时间,图形库出处:https://www.bilibili.com/video/BV1MV411o7P5

他的程序还是很好移植的,我花了半天的代价,把他的程序移植到了我的hal库中.注:对考研狗来说,时间就是金钱.

SD卡的读取

经过一天的尝试,我已经能够读取SD卡中的内容,现在需要做的就是将读取的内容转换成CHAR型变量输出到OLED中去,这时候我就需要申请一个temp数组,大小为1024,将所获得的字符串的相应的部分提取出来减去’0’,然后将所得的16进制代码转换成十进制代码赋值.是这样吗?

现在还剩最后一步:将读出来的数据处理成数据后传给图片缓存函数.

FATFS系统一次能读4G的数据,所以我就设计了一个c语言,将所有的文件都集中在一个文件中。然后一次性打开文件。然后读取特定位,就是打开文件后,发现读取文件之后的数组好像不能直接使用,所以就用一个for循环,将数据读出来。我也不太清楚是怎么一回事。

出新问题

现在发现,光是打开文件,并且关闭文件就要好长时间,遍历整个文件需要将近两个消失。这是我不能接受的,只能在电脑上处理文件之后,单片机再去读取。

大坑

由于需要读取内存卡里的数组的时候需要将数组转化成字符串,所以我用DEV在电脑上先行实验。实验结果完善后,加在单片机上,发现没有完美运行。实验发现,单片机的换行符为‘/r/n’,所以在特判的时候需要

		if (*temp_pointer == '\r') temp_pointer=temp_pointer+2;;

2、有时候SD卡读取失败可以试一下,重新上电。为此我折腾了半个小时。定时器中断不能占用太长时间不然回导致SD卡读取失败。

字符串16进制转十进制

因为程序运行时不能再以十六进制传数,所以只能转换

uint8_t HEX_TO_DEC(uint8_t *T_HEX)
{
	char str[2],temp;
	if((*T_HEX>='0')&&(*T_HEX<='9'))
		str[0] = *T_HEX - '0';
	else if((*T_HEX>='A')&&(*T_HEX<='F'))
		str[0] = *T_HEX - 'A' + 10;
	
	T_HEX++;
	if((*T_HEX>='0')&&(*T_HEX<='9'))
		str[1] = *T_HEX - '0';
	else if((*T_HEX>='A')&&(*T_HEX<='F'))
		str[1] = *T_HEX - 'A' + 10;

		
	temp = str[0]*16+str[1];
	return temp;
}

时间定时

我定时器没有配置好,导致我一直以为是数据传输有问题,搞了半天结果发现是定时器的问题,具体问题就是定时器时间没设定好。结果我没乐意等,就以为是数据处理的问题。哎

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值