USMART 3.1 发布+ 最新SYSTEM文件夹发布 + 最新TFTLCD驱动发布 +最新图片解码库(TJPGD支持)发布

2019-07-21 06:43发布

发布战舰STM32一系列最新的代码.后续将整个战舰光盘代码更新,先上传一个测试工程.
本测试实验采用的新特性:
1,采用最新的SYSTEM文件夹,完全支持MDK3~MDK4全系列(MDK5未测试,应该也兼容),完全兼容库函数V3.5头文件,代码移植到库函数从此省心省事.
2,采用最新的LCD驱动文件,新添加NT35310驱动IC的支持,并增加开窗函数LCD_Set_Window.
3,采用最新的USMART组件V3.1版本,新增runtime系统指令,支持函数执行时间查看(设置指令:runtime 1).
4,采用最新的图片解码库,JPEG/JPG解码采用TJPGD(FATFS作者的又一个作品),速度更快,资源需求更小,对小尺寸jpeg/jpg支持快速显示(开窗).
本测试实验功能:完全串口控制,实现对USMART V3.1,图片解码以及文件系统相关函数的测试功能.
本例重点是usmart V3.1的新特性以及图片解码新特性的测试.

USMART V3.1新特性(V3.1之前的特性,请看USMART文件夹的readme.txt):
usmart V3.1新增函数运行时间统计功能,该功能需要硬件定时器支持,需要将usmart.h里面的:USMART_ENTIMX_SCAN设置为1.
并实现如下几个函数:
//复位runtime
//需要根据所移植到的MCU的定时器参数进行修改
void usmart_reset_runtime(void)
{
 TIM2->SR&=~(1<<0); //清除中断标志位
 TIM2->ARR=0XFFFF; //将重装载值设置到最大
 TIM2->CNT=0;  //清空定时器的CNT
 usmart_dev.runtime=0; 
}
//获得runtime时间
//返回值:执行时间,单位:0.1ms,最大延时时间为定时器CNT值的2倍*0.1ms
//需要根据所移植到的MCU的定时器参数进行修改
u32 usmart_get_runtime(void)
{
 if(TIM2->SR&0X0001)//在运行期间,产生了定时器溢出
 {
  usmart_dev.runtime+=0XFFFF;
 }
 usmart_dev.runtime+=TIM2->CNT;
 return usmart_dev.runtime;  //返回计数值
}
//下面这两个函数,非USMART函数,放到这里,仅仅方便移植.
//定时器2中断服务程序 
void TIM2_IRQHandler(void)
{                 
 if(TIM2->SR&0X0001)//溢出中断
 {
  usmart_dev.scan(); //执行usmart扫描 
  TIM2->CNT=0;  //清空定时器的CNT
  TIM2->ARR=1000;  //恢复原来的设置
 }      
 TIM2->SR&=~(1<<0);//清除中断标志位     
}
//使能定时器2,使能中断.
void Timer2_Init(u16 arr,u16 psc)
{
 RCC->APB1ENR|=1<<0;//TIM2时钟使能   
  TIM2->ARR=arr;  //设定计数器自动重装值 
 TIM2->SC=psc;  //预分频器7200,得到10Khz的计数时钟
 //这两个东东要同时设置才可以使用中断
 TIM2->DIER|=1<<0;   //允许更新中断    
 TIM2->DIER|=1<<6;   //允许触发中断
              
 TIM2->CR1|=0x01;    //使能定时器2
   MY_NVIC_Init(3,3,TIM2_IRQn,2);//抢占3,子优先级3,组2(组2中优先级最低的)         
}

以上是战舰板(STM32)的实现方式,移植到其他平台,请参考设置.
另外,在usmart_init函数,必须设置定时器的计数频率为10Khz,以得到0.1ms为周期的计数时钟.
如下:
void usmart_init(u8 sysclk)
{
#if USMART_ENTIMX_SCAN==1
 Timer2_Init(1000,(u32)sysclk*100-1);//分频,时钟为10K ,100ms中断一次,注意,计数频率必须为10Khz,以和runtime单位(0.1ms)同步.
#endif
 usmart_dev.sptype=1; //十六进制显示参数


图片解码新特性:
1,jpeg/jpg解码部分,采用了TJPGD,该源码是由fatfs的作者提供,TJPGD具有:更小的内存占用,更快的解码速度,以及更多的jpg/jpeg文件解码支持.
2,ai_load_picfile函数,新增fast参数,可以用于设置是否支持对小尺寸(不大于液晶分辨率)jpg/jpeg文件的快速解码(实际上是通过开窗显示,来提高速度).
3,pic_phy新增三个函数指针,用于实现图片开窗显示.


液晶驱动新特性:
1,新增对NT35310液晶驱动器的支持.
2,新增LCD_Set_Window函数.以支持图片快速显示.

SYSTEM文件夹新特性:
1,完全摒弃stm32f10x_lib以及相关头文件,采用stm32f10x.h,与ST官方V3.5库保持同步.
2,完全兼容库函数,兼容MDK3~MDK4各版本(MDK5未测试,理论也支持)

如果遇到3.5移植我们代码有问题的,建议将本例程的SYSTEM文件夹,替换掉你原来的就可以了.
另外,所有的IRQChannel,需要改为:IRQn,就差不多了.


本例程测试图:

通过USMART 的help指令,查看使用说明.

通过list指令,查看可调用的函数清单

通过mf_scan_files("0:")函数调用,扫描SD卡根目录文件

通过通过ai_load_picfile("0:240320.bmp",0,0,240,320,1)函数调用,解码一个240*320的bmp图片
发送:runtime 1,开启函数执行时间统计功能

再次执行ai_load_picfile("0:240320.bmp",0,0,240,320,1),可以看到bmp解码时间

得到240*320 bmp/jpg图片的解码时间对比,以及开启快速显示和不开启快速显示的解码时间对比
新例程介绍到这里,usmart的时间统计功能,有时候非常有用,希望大家多多使用,有更好的建议,欢迎提出.
最后,感谢大家一直以来对ALIENTEK的支持,我们将一如既往提供免费的优质的源码,供大家学习使用.
有你的支持,我们将会更加努力!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
lilovehu521
1楼-- · 2019-07-21 09:10
正点原子
2楼-- · 2019-07-21 13:42
 精彩回答 2  元偷偷看……
405206035@qq.co
3楼-- · 2019-07-21 14:12
回复【楼主位】正点原子:
---------------------------------
顶!必须顶!
闷鱼
4楼-- · 2019-07-21 18:49
不太懂啊   快速解码时怎么回事
正点原子
5楼-- · 2019-07-21 20:06
回复【5楼】闷鱼:
---------------------------------
说白了就是用填充的方式显示.
假设你开个100*100的窗口.
原来用画点的方法,你必须调用设置坐标函数:100*100次=10000次.
然后如果用开窗的方式,就只需要设置1次,然后不停的填充图片数据就可以了.
wghfbj
6楼-- · 2019-07-21 23:22
顶一个。

一周热门 更多>