[STM32F072 Nucleo ] 开发板驱动320240LCD
本帖最后由 wenyangzeng 于 2014-12-23 22:43 编辑手头有1片RA8835主控芯片的320X240图形液晶模块,决定拿它在STM32F072 Nucleo 开发板上试用看看。使用杜邦连接线进行连接,见下图:
进入STM32CubeMX 花费2分钟简单配置了相关GPIO口为推挽输出,导入MDK5。在MDK5中添加驱动RA8835的相关函数,,并为要显示的汉字提取了字模。显示效果见下图:
控制RA8835的GPIO口的位操作采用以下预定义:
#define cs_H HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET)
#define cs_L HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_RESET)
#define a0_H HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET)
#define a0_L HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET)
#define wr_H HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET)
#define wr_L HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_RESET)
#define rst_H HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET)
#define rst_L HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET)
#define rd_H HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET)
#define rd_L HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET)
而传送给RA8835数据总线的底层函数操作,找遍了STM32CubeMX生成的固件库竟然找不到诸如STM32F0固件库的16位的数据传输之类函数:
GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)可供调用,使得用惯固件函数调用的习惯现在有点不适应了。只能采用寄存器操作方式进行:
void write_cmda(uint8_t cm,uint8_t com)
{
cs_L;
if(cm==0)
a0_L;
else
a0_H;
wr_L;
GPIOC->ODR &=0xff00;
GPIOC->ODR |=com;
__nop();__nop(); __nop();__nop();
wr_H;
__nop();__nop(); __nop();__nop(); __nop();__nop();
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
lcd_init();
lcd_clr();
Gotoxy(0x00,0x00);
LCD_kuang();
disp_ascii0816("STM32F072-Nulceo",2006);
display_hanzi(kai,1664);
display_hanzi(fa,1667);
display_hanzi(ban,1670);
display_hanzi(qu,3406);
display_hanzi(dong,3409);
disp_ascii0816("320x240 LCM",3814);
display_hanzi(mo,3466);
display_hanzi(kuai,3469);
display_hanzi(bian,5206);
display_hanzi(cheng,5209);
display_hanzi(huan,5212);
display_hanzi(jing,5215);
display_hanzi(maohao,5218);
disp_ascii0816("STM32 CubeMX & MDK5",7010);
while (1)
{
}
}
CubeMX爱你不容易!
本帖最后由 wenyangzeng 于 2018-3-14 13:00 编辑
cyh5460 发表于 2018-3-13 23:13
能否将整个工程包发我一下,谢谢
不明白楼上是在编程呢?还是让人代编程?整个RA8835最底层函数都共享了,应该自己消化吸收,化为自己的知识财富。要写好RA8835,楼主必须吃透RA8835工作原理,才可以自由发挥。比如RA8835显示方式与其他12864不同,它是每水平行8个Bit一次扫描,扫描40个字节完成1行,12864则是垂直扫描1列。工作原理不同。
楼主让我发送整个全部源代码给你。源代码全部也就显示帖子开头图片里的显示信息而已。如何套在您的应用中?
举个例子:你如何在实际应用中在任何位置显示16点阵、24点阵、32点阵、64点阵汉字?
编程过程参考别人的代码是正常的也是必须经过的过程,但是别人的代码只是参考借鉴。要自己深入进去研究,才能真正写出自己的财富!其实写LCD最主要的就是初始化代码,这些代码如果厂家不给你,你是无法成功的。请你珍惜楼主共享给你的RA8835底层原始代码,真正做到他为己用。将近4年前的帖子,全部源代码多次修改,实在无法完全还原,望谅!
祝楼上不断进步。
还有差点忘记:那个AsciiDot0816()故名思意是一个ASIIC 8×16点阵英文符号显示的函数而已,而ASIIC 8×16点字库应该到处DownLoad都找得到的。
带你飞啊啊 发表于 2019-10-18 14:37
楼主我想问问看。。。你有检测busy繁忙标志?为啥我一直是繁忙标志高电平,,第二个是所有的字库全靠写一行 ...
1、无需检测忙;
2、8835是一次写8Bit,字库当然要自己做;
3、打点函数实际上还是一次写8Bit,经过与或得到某一点的写入
4、读数据估计是读方向旋转了90°所以不正常。 wenyangzeng 发表于 2019-10-18 14:47
1、无需检测忙;
2、8835是一次写8Bit,字库当然要自己做;
3、打点函数实际上还是一次写8Bit,经过与或得 ...
读数据手册说要不在繁忙才能读。。然后如果忽略繁忙直接读 ,0xff或0x00写全屏,读到的数据都一直变,所以我不清楚啥情况。。旋转90°啥意思 谢谢楼主分享~ 楼主厉害啊 可以专门设一个图形驱动板块。
谢谢楼主分享~ 我win7装mdk5失败了,加不上pack怎么回事?自己下载也加载不了,有明白人指导下吗? AndyYau-268557 发表于 2015-1-5 13:28
我win7装mdk5失败了,加不上pack怎么回事?自己下载也加载不了,有明白人指导下吗? ...
https://www.stmcu.org.cn/module/forum/thread-598151-1-1.html
谢谢,得以解决 没看到代码啊:dizzy: 本帖最后由 wenyangzeng 于 2017-2-4 17:32 编辑
深圳小明 发表于 2017-2-4 13:39
没看到代码啊
在1楼呀,下载次数66,楼上需要配眼镜了。 wenyangzeng 发表于 2017-2-4 16:04
在1楼呀,下载次数66,楼上需要配眼镜了。
我知道1楼,下载次数72了,但是下载下来只有一个hex文件。所以我才说没有看到代码。 深圳小明 发表于 2017-2-14 10:39
我知道1楼,下载次数72了,但是下载下来只有一个hex文件。所以我才说没有看到代码。 ...
这个文件可供你参考:
wenyangzeng 发表于 2017-2-15 10:28
这个文件可供你参考:
谢谢!虽然我已经用FSMC驱动好了。还是非常感谢。 可以专门设一个图形驱动板块 深圳小明 发表于 2017-2-15 13:59
谢谢!虽然我已经用FSMC驱动好了。还是非常感谢。
朋友你好,我最近也在调试RA8835的屏,用的也是FSMC模式,FSMC的时序用示波器看似乎没问题,就是不能显示,可以交流一下吗?