OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5749|回复: 4

基于STM32的12232液晶串口程序,由51转过来的,但是下载到板子上无显示,求高手指点。

[复制链接]

13

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-3-2
在线时间
0 小时
发表于 2014-6-8 14:54:39 | 显示全部楼层 |阅读模式
5金钱
程序是参考的郭天祥的51代码
板子上Mini板
引脚:
CS   PC10
SID PC9
SCLK  PC8
[mw_shl_code=c,true]//12232.h文件 #ifndef __12232_H #define __12232_H #include "stm32f10x.h" #include "systick.h" #define CS PCout(10) #define SID PCout(9) #define SCLK PCout(8) /////////////////////////////////////////////////////////////// //位带操作,实现51类似的GPIO控制功能 //具体实现思想,参考<<CM3权威指南>>第五章(87页~92页). //IO口操作宏定义 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) //IO口地址映射 #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 #define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08 #define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08 //IO口操作,只对单一的IO口! //确保n的值小于16! #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出 #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入 #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出 #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入 #define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出 #define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入 #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出 #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入 #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出 #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入 #define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出 #define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入 #define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出 #define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入 void display_x(void); void display_s(void); void lcd_init(void); void send_data(u8 command_data); void send_command(u8 command_data); #endif [/mw_shl_code]

[mw_shl_code=c,true]//12232.c文件 #include "12232.h" u8 disps[]="I LOVE MCU!"; u8 dispx[]="我爱单片机!"; void send_command(u8 command_data) { u8 i; u8 i_data; i_data=0xf8; CS=1; SCLK=0; for(i=0;i<8;i++) { SID=((i_data&0x80)?1:0); //////////// SCLK=0; SCLK=1; i_data=i_data<<1; } i_data=command_data; i_data&=0xf0; for(i=0;i<8;i++) { SID=((i_data&0x80)?1:0); //////////// SCLK=0; SCLK=1; i_data=i_data<<1; } i_data=command_data; i_data<<=4; for(i=0;i<8;i++) { SID=((i_data&0x80)?1:0); //////////// SCLK=0; SCLK=1; i_data=i_data<<1; } CS=0; delay_ms(10); } void send_data(u8 command_data) { u8 i; u8 i_data; i_data=0xfa; CS=1; for(i=0;i<8;i++) { SID=((i_data&0x80)?1:0); //////////// SCLK=0; SCLK=1; i_data=i_data<<1; } i_data=command_data; i_data&=0xf0; for(i=0;i<8;i++) { SID=((i_data&0x80)?1:0); //////////// SCLK=0; SCLK=1; i_data=i_data<<1; } i_data=command_data; i_data<<=4; for(i=0;i<8;i++) { SID=((i_data&0x80)?1:0); //////////// SCLK=0; SCLK=1; i_data=i_data<<1; } CS=0; delay_ms(10); } void lcd_init() { GPIO_InitTypeDef GPIO_InitStructure; //使能GPIOC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //PC8-PC10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//普通推挽输出(应用在输出电平在0~3.3v) GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10); delay_ms(100); send_command(0x30); //设置8位数据接口,基本指令模式 send_command(0x02); //清DDRAM send_command(0x06); //游标及显示右移一位 send_command(0x0c); //整体显示开,游标关,反白关 send_command(0x01); //写入空格清屏幕 send_command(0x80); //设定首次显示位置 } void display_s() { u8 a; send_command(0x80); for(a=0;a<11;a++) { send_data(disps[a]); } } void display_x() { u8 a; send_command(0x92); for(a=0;a<11;a++) { send_data(dispx[a]); } } [/mw_shl_code]


最佳答案

查看完整内容[请看2#楼]

代码无问题,12232液晶上的串口和并口模式要通过短路帽配置
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-3-2
在线时间
0 小时
 楼主| 发表于 2014-6-8 14:54:40 | 显示全部楼层
代码无问题,12232液晶上的串口和并口模式要通过短路帽配置
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-6-8 22:32:31 | 显示全部楼层
STM32的速度比51快很多,在哪些SCLK=0,SCLK=1之类的操作后面加入延时试试.
另外,你看看12232的数据手册,这些延时时间,具体是多少,手册都应该有写才是.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-3-2
在线时间
0 小时
 楼主| 发表于 2014-6-9 14:18:35 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
正点大哥,我加了延迟,但是还是不行。这是以前的一个帖子,http://www.openedv.com/posts/list/0/641.htm ,想向那位帖主寻求帮助。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-12-4
在线时间
3 小时
发表于 2020-10-16 20:56:29 | 显示全部楼层
PC8,PC9,PC10不能容忍5V电平,试试用其它FT引脚
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-17 18:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表