新手入门
- 积分
- 32
- 金钱
- 32
- 注册时间
- 2013-4-9
- 在线时间
- 0 小时
|
我因为没有使用过STM32,现在正在将原子哥的综合实验翻译到自己的板子上来,现在先将问题经历描述如下:
在system_init()函数之后,应该会进入main_task(start不算),然后我将进到spb_init();此时,在我理解中是通过这个函数将开机桌面显示出来,也就是覆盖掉原来的启动界面。而在spb_init()函数中,真正用来刷新屏幕的只有一句话:“SLCD.show(SLCD.pos);//显示主界面。”现在将原子哥的void slcd_frame_show(unsigned short int x)的全部代码贴出:
//显示帧
//x:帧的x坐标.
//color:颜色.
void slcd_frame_show(u16 x)
{
LCD_Scan_Dir(U2D_L2R); //设置扫描方向
LCD_SetCursor(0x00,0x0000); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
LCD_DMA_Enable(x); //启动一次DMA传输
LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认方向
}
经过我本人翻译后实验,发现如果我仅仅是在第四句话替换成不断地塞入数据,屏幕并不会更新,我将测试代码贴下:
LCD_Scan_Dir(U2D_L2R); //设置扫描方向
LCD_SetCursor(0x00,0x0000); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
TFT_IO_DIRECTION_OUT;
for(i = 0; i<100;i++){
TFT_DATA->DATA = 0xffff;
}
只有当我这样写才能在屏幕上观察到变化:
LCD_Scan_Dir(U2D_L2R); //设置扫描方向
LCD_SetCursor(0x00,0x0000); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
TFT_IO_DIRECTION_OUT;
for(i = 0; i<100;i++){
TFT_RS->DATA= 1;
TFT_CS->DATA= 0;
TFT_DATA->DATA = 0xffff;
TFT_RW->DATA= 0;
TFT_RW->DATA= 1;
TFT_CS->DATA= 1;
}
我的DMA传送数据是直接传送的(nios软核中的标配),期间貌似不能允许其他操作(也就是不能将TFT_RS之类的置高置低),现将问题描述如下:
1、请问STM32的DMA在执行数据传送的时候能够操作其他的引脚以达到屏幕刷新操作吗?、
2、如果不能,请问直接输入数据可以直接刷屏吗?
3、为什么我在这个函数中。在LCD_Scan_Dir(U2D_L2R); //设置扫描方向之后,使用如下两个函数LCD_SetCursor(0x00,0x0000); //设置光标位置
LCD_Fill(0,0,240,320,BLACK);
使用这两条语句为什么不能将屏幕刷黑,而当我将扫描方向注释掉后可以刷黑了。
希望有知情者能给予帮助
|
|