要求:编写一个函数,将RGB数据显示到TFT彩屏上,RGB数据为565格式,
平台:STM32F030 LCD:ST7735S
编译平台:MDK5.14
对于这个一般的来说很多人会这么写
void LCD_Draw_RGB(u16 x,u16 y,u16 x_size,u16 y_size,u16 *pixel)
{
u16 i,j;【0】
....//此处省略的代码为向LCD设置显示内存区域【2】
for(i = 0;i < x_size;i++)【3】
{
for(j = 0;j < y_size;j++)【4】
{
lcd_put_pixel_bytes(*pixel);【5】
lcd_put_pixel_bytes(*(pixel >>8));【6】
pixel++;【7】
}
}
}
以此为例
const u8 _t_test_bmp_data[]={......};此处为静态BMP,RGB565的数据,用以数组的形式存放
然后显示 _t_test_bmp_data里面的BMP数据,一般来说
LCD_Draw_RGB(0,0,60,60,(u16*)_t_test_bmp_data);
很多人都认为这样调用的话,会将_t_test_bmp_data里面的数据显示到相应的LCD上面,
这样写,有时候能够运行,有时候则将不会运行,单片机会复位
至于出现这个的原因如下:
当编译器在编译程序的时候,如果_t_test_bmp_data
这个静态数据的起始地址是2的整数倍的话,那么是没有问题的
而当编译的_t_test_bmp_data这个静态数据的起始地址是奇数的时候,则会发生,内存总线访问错误的,硬件错误
当产生硬件总线错误的时候,芯片一般会复位
复位会发生在【5】这个地方