野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25409|回复: 7

关于stm32复用功能问题

[复制链接]
发表于 2014-6-5 16:59:45 | 显示全部楼层 |阅读模式
请教,管脚开启复用功能后能否再对其复位置位?野火代码里面是用了置位,但是我测量无论置位复位电平是不变的
  1. static void LCD_GPIO_Config(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStructure;
  4.    
  5.     /* Enable the FSMC Clock */
  6.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  7.    
  8.     /* config lcd gpio clock base on FSMC */
  9.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
  10.    
  11.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  12.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.    
  14.     /* config tft back_light gpio base on the PT4101 */
  15.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;   
  16.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  17.    
  18.     /* config tft rst gpio */
  19.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;   
  20.     GPIO_Init(GPIOE, &GPIO_InitStructure);         
  21.    
  22.     /* config tft data lines base on FSMC
  23.    * data lines,FSMC-D0~D15: PD 14 15 0 1,PE 7 8 9 10 11 12 13 14 15,PD 8 9 10
  24.    */  
  25.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  26.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  27.    
  28.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
  29.                                   GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
  30.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  31.    
  32.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
  33.                                   GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
  34.                                   GPIO_Pin_15;
  35.     GPIO_Init(GPIOE, &GPIO_InitStructure);
  36.    
  37.     /* config tft control lines base on FSMC
  38.    * PD4-FSMC_NOE  :LCD-RD
  39.    * PD5-FSMC_NWE  :LCD-WR
  40.    * PD7-FSMC_NE1  :LCD-CS
  41.    * PD11-FSMC_A16 :LCD-DC
  42.    */
  43.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  44.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  45.    
  46.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  47.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  48.    
  49.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  50.     GPIO_Init(GPIOD, &GPIO_InitStructure);  
  51.    
  52.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ;
  53.     GPIO_Init(GPIOD, &GPIO_InitStructure);  
  54.    
  55.     /* tft control gpio init */   
  56.     GPIO_SetBits(GPIOD, GPIO_Pin_13);     // LIGHT  
  57.     GPIO_ResetBits(GPIOE, GPIO_Pin_1);   //  RST = 1   
  58.     GPIO_SetBits(GPIOD, GPIO_Pin_4);     // RD = 1  
  59.     GPIO_SetBits(GPIOD, GPIO_Pin_5);     // WR = 1
  60.     GPIO_SetBits(GPIOD, GPIO_Pin_7);     //  CS = 1
  61.    
  62.     GPIO_ResetBits(GPIOD, GPIO_Pin_3);
  63.     GPIO_SetBits(GPIOD, GPIO_Pin_6);
  64. }
复制代码
回复

使用道具 举报

发表于 2014-6-5 17:02:32 | 显示全部楼层
不清楚你指的复位置位具体是什么意思,总而言之,开启复用功能其实就是把这个引脚设置成数据手册里说明的那种指定的功能,一般是某种外设功能,如串口,iic等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 17:03:24 | 显示全部楼层
左丘冰 发表于 2014-6-5 17:02
不清楚你指的复位置位具体是什么意思,总而言之,开启复用功能其实就是把这个引脚设置成数据手册里说明的那 ...

GPIO_SetBits(GPIOD, GPIO_Pin_13);     // LIGHT  
    GPIO_ResetBits(GPIOE, GPIO_Pin_1);   //  RST = 1   
    GPIO_SetBits(GPIOD, GPIO_Pin_4);     // RD = 1  
    GPIO_SetBits(GPIOD, GPIO_Pin_5);     // WR = 1
    GPIO_SetBits(GPIOD, GPIO_Pin_7);     //  CS = 1
   
    GPIO_ResetBits(GPIOD, GPIO_Pin_3);
    GPIO_SetBits(GPIOD, GPIO_Pin_6);
回复 支持 反对

使用道具 举报

发表于 2014-6-5 17:04:36 | 显示全部楼层
bbglx 发表于 2014-6-5 17:03
GPIO_SetBits(GPIOD, GPIO_Pin_13);     // LIGHT  
    GPIO_ResetBits(GPIOE, GPIO_Pin_1);   //  RST ...

可以这样控制的,这是最基本的IO功能,跟是否开启复用没有关系
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 17:05:44 | 显示全部楼层
左丘冰 发表于 2014-6-5 17:02
不清楚你指的复位置位具体是什么意思,总而言之,开启复用功能其实就是把这个引脚设置成数据手册里说明的那 ...

上面的几个脚已经复用为fsmc功能了,为什么还要GPIO_SetBits、GPIO_ResetBits呢?
不明白啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 17:08:05 | 显示全部楼层
慕娅娜 发表于 2014-6-5 17:04
可以这样控制的,这是最基本的IO功能,跟是否开启复用没有关系

为什么我测不到电压变化呢?GPIO_ResetBits、GPIO_SetBits都是高电平?
回复 支持 反对

使用道具 举报

发表于 2014-6-5 17:21:05 | 显示全部楼层
bbglx 发表于 2014-6-5 17:08
为什么我测不到电压变化呢?GPIO_ResetBits、GPIO_SetBits都是高电平?

不太清楚呢,可能是真的不行吧,我也没有像楼主这么认真去测试过,实践出真知啊。为了确定你测的没有错误,你在那些语句后面加个死循环语句,排除后面执行的代码影响
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 17:25:42 | 显示全部楼层
慕娅娜 发表于 2014-6-5 17:21
不太清楚呢,可能是真的不行吧,我也没有像楼主这么认真去测试过,实践出真知啊。为了确定你测的没有错误 ...

加了哦,印象中手册是说复用之后就不要用普通方式操作io了,但是野火例程不一样。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-27 23:44 , Processed in 0.034204 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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