OpenEdv-开源电子网

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

F103C8T6的OLED显示修改引脚

[复制链接]

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
发表于 2019-7-29 16:20:34 | 显示全部楼层 |阅读模式
40金钱
本帖最后由 bahjdbge 于 2019-7-29 16:27 编辑

我把原来占用的PB0和PB1修改成PB3和PB4,相关IO口的定义也改了,为什么烧上去显示不出来
void OLED_Init(void)
{         

         
         GPIO_InitTypeDef  GPIO_InitStructure;
         
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7;         
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
         GPIO_Init(GPIOA, &GPIO_InitStructure);         
         GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_4);        
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_8;         
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
         GPIO_Init(GPIOB, &GPIO_InitStructure);      
         GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_8);        



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-29 16:21:20 | 显示全部楼层
#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_5)//CLK
#define OLED_SCLK_Set() GPIO_SetBits(GPIOA,GPIO_Pin_5)

#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_7)//DIN
#define OLED_SDIN_Set() GPIO_SetBits(GPIOA,GPIO_Pin_7)

#define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_3)//RES
#define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_Pin_3)

#define OLED_DC_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_4)//DC
#define OLED_DC_Set() GPIO_SetBits(GPIOB,GPIO_Pin_4)
                     
#define OLED_CS_Clr()  GPIO_ResetBits(GPIOA,GPIO_Pin_4)//CS
#define OLED_CS_Set()  GPIO_SetBits(GPIOA,GPIO_Pin_4)

#define OLED_CMD  0       
#define OLED_DATA 1       
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-29 16:24:05 | 显示全部楼层
int main(void)
{        u32 t;
           SystemInit();        
    Key_GPIO_Config();
                delay_init();                              
                NVIC_Configuration();        
                OLED_Init();                          
                OLED_Clear()          ;

                t=132;
                 OLED_Clear();
        while(1)
        {               

                OLED_ShowCHinese(18,0,12);
                OLED_ShowCHinese(36,0,13);
                OLED_ShowCHinese(54,0,14);
                OLED_ShowCHinese(72,0,15);
                OLED_ShowCHinese(90,0,16);
                OLED_ShowCHinese(108,0,16);
                OLED_ShowString(36,6,"2019.7.25");       
        }          
       
}
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-29 16:26:33 | 显示全部楼层
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{                                  
        u8 t,adder=0;
        OLED_Set_Pos(x,y);       
    for(t=0;t<16;t++)
                {
                                OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
                                adder+=1;
     }       
                OLED_Set_Pos(x,y+1);       
    for(t=0;t<16;t++)
                        {       
                                OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
                                adder+=1;
      }                                       
}
        void OLED_Set_Pos(unsigned char x, unsigned char y)
{
        OLED_WR_Byte(0xb0+y,OLED_CMD);
        OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
        OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
}          
void OLED_WR_Byte(u8 dat,u8 cmd)
{       
        u8 i;                          
        if(cmd)
          OLED_DC_Set();
        else
          OLED_DC_Clr();                  
        OLED_CS_Clr();
        for(i=0;i<8;i++)
        {                          
                OLED_SCLK_Clr();
                if(dat&0x80)
                   OLED_SDIN_Set();
                else
                   OLED_SDIN_Clr();
                OLED_SCLK_Set();
                dat<<=1;   
        }                                                   
        OLED_CS_Set();
        OLED_DC_Set();             
}  
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-29 16:27:01 | 显示全部楼层
求大佬帮我看一下
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10570
金钱
10570
注册时间
2017-2-18
在线时间
1913 小时
发表于 2019-7-29 18:24:58 | 显示全部楼层
PB3/PB4被JTAG占用,先失能JTAG再去试试
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable);
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-30 08:44:10 | 显示全部楼层
peng1554 发表于 2019-7-29 18:24
PB3/PB4被JTAG占用,先失能JTAG再去试试
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable);

我在主函数的OLED_Init()前添加了
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,DISABLE);
但是还是不能够显示出来
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-30 09:12:39 | 显示全部楼层
peng1554 发表于 2019-7-29 18:24
PB3/PB4被JTAG占用,先失能JTAG再去试试
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable);

我在主函数OLED_Init()前添加了
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,DISABLE);
但还是没有显示出来
回复

使用道具 举报

17

主题

194

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1049
金钱
1049
注册时间
2016-9-3
在线时间
158 小时
发表于 2019-7-30 09:16:34 | 显示全部楼层
你用的SPI吧,检查一下时序
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-30 10:14:47 | 显示全部楼层
午夜狼嚎 发表于 2019-7-30 09:16
你用的SPI吧,检查一下时序

我在修改引脚之前是可以正常显示的,时序肯定没问题啊,就简单修改了宏定义和GPIO口的初始化
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2019-7-31 09:53:53 | 显示全部楼层
这个第一步用示波器抓下有没有控制到IO口
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-31 13:09:31 | 显示全部楼层
awsawzj 发表于 2019-7-31 09:53
这个第一步用示波器抓下有没有控制到IO口

IO口有输出,不知道是不是因为是在同一个IO还接了一个LED的问题
回复

使用道具 举报

0

主题

131

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2019-7-1
在线时间
6 小时
发表于 2019-7-31 13:29:12 | 显示全部楼层
感谢大家的分享
IIS7站长  http://www.iis7.com/
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2019-7-31 19:40:01 | 显示全部楼层
bahjdbge 发表于 2019-7-31 13:09
IO口有输出,不知道是不是因为是在同一个IO还接了一个LED的问题

那要看你怎么接的
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-8-1 09:40:44 | 显示全部楼层
这样接的应该没问题啊
QQ图片20190801093935.png
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-8-1 09:57:00 | 显示全部楼层
bahjdbge 发表于 2019-7-30 08:44
我在主函数的OLED_Init()前添加了
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,DISABLE);
但是还 ...

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,DISABLE);
之前要开复用时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-8-2 11:05:16 | 显示全部楼层
nashui_sx 发表于 2019-8-1 09:57
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,DISABLE);
之前要开复用时钟

虽然还是没有解决,但是谢谢了,
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 11:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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