打印

香版,如何对STM32的IO口多位并行操作?

[复制链接]
8491|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzzly|  楼主 | 2011-8-22 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
象51那样一位一位操作本人是知道了,但是对于多位(例如8位)并行输入输出如何定义?谢谢!
沙发
香水城| | 2011-8-22 12:12 | 只看该作者
直接定义一个8位的变量即可。

使用特权

评论回复
板凳
yzzly|  楼主 | 2011-8-22 13:08 | 只看该作者
本帖最后由 yzzly 于 2011-8-22 13:39 编辑

不是很明白香版的意思;比如我想定义PA0~PA7为LCDPORT,PA8~PA11为LCD的控制信号,定义了8位变量后,我希望直接读写LCDPORT,如何操作才不影响PA端口的其他位?
对端口的数据寄存器进行位域操作影响其他位吗?

使用特权

评论回复
地板
香水城| | 2011-8-22 13:21 | 只看该作者

使用特权

评论回复
5
yzzly|  楼主 | 2011-8-22 13:43 | 只看该作者
其实,这样的方法咱也知道,只是觉得这样做与以往用的MCU相比不是很简洁。

使用特权

评论回复
6
香水城| | 2011-8-22 13:55 | 只看该作者
其实,这样的方法咱也知道,只是觉得这样做与以往用的MCU相比不是很简洁。
yzzly 发表于 2011-8-22 13:43


明知故问,打PP,:o

使用特权

评论回复
7
baidudz| | 2011-8-22 16:20 | 只看该作者
香主的不烦其问啊:lol

使用特权

评论回复
8
yzzly|  楼主 | 2011-8-22 16:30 | 只看该作者
我说刚才怎么PP有点疼,原来是被香版打的!:'(

使用特权

评论回复
9
pkat| | 2011-8-22 22:28 | 只看该作者
香主改行去当老师吧:lol

使用特权

评论回复
10
re张风| | 2011-8-24 13:54 | 只看该作者
LZ想要这种吧!
        //********************************************************
        // Init GPIO ExRAM Control Bus
        //********************************************************
        // Init #CS
        GPIO_InitStructure.GPIO_Pin = ExCS;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(ExCS_GPIO, &GPIO_InitStructure);
        GPIO_SetBits(ExCS_GPIO,ExCS);
        // Init #WE
        GPIO_InitStructure.GPIO_Pin = ExWE;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(ExWE_GPIO, &GPIO_InitStructure);
        GPIO_SetBits(ExWE_GPIO,ExWE);
        // Init #RD
        GPIO_InitStructure.GPIO_Pin = ExRD;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(ExRD_GPIO, &GPIO_InitStructure);
        GPIO_SetBits(ExRD_GPIO,ExRD);
        // Init AddrBus
        GPIO_InitStructure.GPIO_Pin = ExSA;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(ExSA_GPIO, &GPIO_InitStructure);
        GPIO_SetBits(ExSA_GPIO,ExSA);
        // Init DataBus
        GPIO_InitStructure.GPIO_Pin = ExBus;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(ExBus_GPIO, &GPIO_InitStructure);


int outportb(uint8_t Addr , uint8_t WriteData)
{
        uint16_t i1;


        // Set Data Bus : OutPut
        GPIO_InitStructure.GPIO_Pin = ExBus;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(ExBus_GPIO, &GPIO_InitStructure);

        i1 = Addr & 0x3;
        i1 = i1 << 6;
        GPIO_WriteBits( ExSA_GPIO , ExSA , i1 );         // set Addr

        i1 =  WriteData & 0xff;
        i1 = i1 << 8;
        GPIO_WriteBits( ExBus_GPIO , ExBus , i1 ); // set Data
        //us_Delay(1);
        GPIO_ResetBits( ExCS_GPIO , ExCS );                 // set #CS : low level
        //us_Delay(1);
        GPIO_ResetBits( ExWE_GPIO , ExWE );                 // set #WE : low level
        // Delay
        //us_Delay(2);
        GPIO_SetBits( ExWE_GPIO , ExWE );                 // set #WE : High level
        GPIO_SetBits( ExCS_GPIO , ExCS );                 // set #CS : High level
       
       
        // Init DataBus
        GPIO_InitStructure.GPIO_Pin = ExBus;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(ExBus_GPIO, &GPIO_InitStructure);

        return 1;
}

uint8_t inportb(uint8_t Addr)
{
        uint16_t i1;

        i1 = Addr & 0x3;
        i1 = i1 << 6;
        GPIO_WriteBits( ExSA_GPIO , ExSA , i1 );         // set Addr

//        i1 =  WriteData & 0xff;
//        i1 = i1 << 8;
//        GPIO_WriteBits( ExBus_GPIO , ExBus , i1 ); // set Data

        GPIO_ResetBits( ExCS_GPIO , ExCS );                 // set #CS : low level
        //us_Delay(1);
        GPIO_ResetBits( ExRD_GPIO , ExRD );                 // set #RD : low level
        // Delay
        //us_Delay(2);
        i1 = GPIO_ReadInputData(ExBus_GPIO);         // read data state on the data bus

        GPIO_SetBits( ExRD_GPIO , ExRD );                 // set #RD : High level
        GPIO_SetBits( ExCS_GPIO , ExCS );                 // set #CS : High level
       

        i1 = (i1 >> 8) & 0xff;
        return i1;
}

使用特权

评论回复
11
re张风| | 2011-8-24 13:57 | 只看该作者
忘记给你定义了:
// Define GPIO_ExRAM dependine
// #cs
#define ExCS                GPIO_Pin_11
#define ExCS_GPIO               GPIOA
#define ExCS_Periph             RCC_APB2Periph_GPIOA
// #we
#define ExWE                GPIO_Pin_12
#define ExWE_GPIO               GPIOA
#define ExWE_Periph             RCC_APB2Periph_GPIOA
// #rd
#define ExRD                GPIO_Pin_5
#define ExRD_GPIO               GPIOB
#define ExRD_Periph             RCC_APB2Periph_GPIOB
// SA0,SA1
#define ExSA                GPIO_Pin_6 | GPIO_Pin_7
#define ExSA_GPIO               GPIOB
#define ExSA_Periph             RCC_APB2Periph_GPIOB

// data bus
#define ExBus               GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15
#define ExBus_GPIO               GPIOB
#define ExBus_Periph             RCC_APB2Periph_GPIOB

声明下:仅供参考,自己整出错了,概不负责的哈。:lol

使用特权

评论回复
12
香水城| | 2011-8-24 15:00 | 只看该作者
香主改行去当老师吧:lol
pkat 发表于 2011-8-22 22:28


曾经做个老师,但没做好,只好下海做工程师,:L

使用特权

评论回复
13
28182900| | 2012-12-21 09:55 | 只看该作者
你的博客挂了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

427

主题

1178

帖子

3

粉丝