搜索
bottom↓
回复: 6

stm32的gpio模拟读写rc531问题

[复制链接]

出0入0汤圆

发表于 2010-9-11 22:01:09 | 显示全部楼层 |阅读模式
我的代码如下,我想用gpio模拟读写rc531 操作始终不成功
时序图如下

rc531 时序图 (原文件名:rc531.JPG)


rc531接线图 (原文件名:rc531原理图.JPG)

代码如下
我想通过 写读 FifoData来验证rc531 操作是否成功 这样可不可行

#define RF_CS       GPIO_Pin_9          //GPIOD
#define RF_RESET    GPIO_Pin_6          //GPIOD
#define RF_ALE       GPIO_Pin_10         //GPIOD
#define RF_WR       GPIO_Pin_7          //GPIOD
#define RF_RD       GPIO_Pin_8          //GPIOD


#define RF_CS_HIGH              GPIO_SetBits(GPIOD,RF_CS)
#define RF_CS_LOW               GPIO_ResetBits(GPIOD,RF_CS)

#define RF_RESET_HIGH           GPIO_SetBits(GPIOD,RF_RESET)
#define RF_RESET_LOW            GPIO_ResetBits(GPIOD,RF_RESET)

#define RF_ALE_HIGH             GPIO_SetBits(GPIOD,RF_ALE)
#define RF_ALE_LOW              GPIO_ResetBits(GPIOD,RF_ALE)

#define RF_WR_HIGH              GPIO_SetBits(GPIOD,RF_WR)
#define RF_WR_LOW               GPIO_ResetBits(GPIOD,RF_WR)

#define RF_RD_HIGH              GPIO_SetBits(GPIOD,RF_RD)
#define RF_RD_LOW               GPIO_ResetBits(GPIOD,RF_RD)

void rf_gpio_init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);

    /* 并口  */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    RF_CS_HIGH;
    RF_RD_HIGH;
    RF_ALE_LOW;
}


void rf_write_cmd(u8 cmd)
{
    RF_RD_HIGH;
    RF_WR_HIGH;
    RF_CS_HIGH;

   
    GPIOC->CRL = 0x22222222;
    GPIOC->ODR = (u16)cmd;
   
    RF_ALE_HIGH;
    Delay(0x1f);
    RF_ALE_LOW;

    RF_RD_HIGH;
    RF_WR_HIGH;
    RF_CS_HIGH;
}

void rf_write_data(u8 data)
{
    RF_ALE_LOW;
    RF_WR_LOW;
    RF_RD_HIGH;
    RF_CS_LOW;
   
    //GPIOC->CRL = 0x22222222;        //2M 推挽输出
    GPIOC->CRL = 0x33333333;        //50M 推挽输出
    GPIOC->ODR = (u16)data;

    Delay(0x1f);
    RF_WR_HIGH;
    RF_CS_HIGH;
    RF_ALE_LOW;
    RF_RD_HIGH;
}

u8 rf_read_data()
{
    u8 data;
    RF_ALE_LOW;
    RF_WR_HIGH;
    RF_RD_LOW;
    RF_CS_LOW;
   
    //GPIOE->CRL = 0xcccccccc; //输入
    GPIOE->CRL = 0x44444444; //输入
    data = (u8)(GPIOE->IDR);
   
    RF_RD_HIGH;
    RF_WR_HIGH;
    RF_CS_HIGH;
    RF_ALE_LOW;

    return data;
}


void rf_init(void)
{
    u8 data;
    rf_gpio_init();

    RF_RESET_HIGH;
    Delay(0xaffff);
    RF_RESET_LOW;
    //RF_RESET_HIGH;

    rf_write_cmd(0x01);     //command
    data = rf_read_data();


    rf_write_cmd(0x02);     //fifiData
    rf_write_data(0xff);
    rf_write_cmd(0x02);
    data = rf_read_data();


    rf_write_cmd(0x02);      //fifiData
    rf_write_data(0xfe);
    rf_write_cmd(0x02);
    data = rf_read_data();
     
}

出0入0汤圆

 楼主| 发表于 2010-9-11 22:05:39 | 显示全部楼层
A0 A1 A2 是 高 高 低

应该是并口通讯吧  写寄存器时应该是 [写reg -> 写数据] 读寄存器是 [写reg -> 读数据]

mcu接口的屏 一般写寄存器 AlE 信号是低 写Data ALE 信号是高
看上面的时序图,好像正好是反的,我按照lcd屏的时序去读写 也不行

哪位有现成的代码可以参考下吗

出0入0汤圆

 楼主| 发表于 2010-9-11 22:36:39 | 显示全部楼层
cpu 是stm32f103

出0入0汤圆

 楼主| 发表于 2010-9-13 13:14:38 | 显示全部楼层
终于通了 ,哎 道路曲折

出0入0汤圆

发表于 2010-12-20 14:50:07 | 显示全部楼层
我在调RC531的SPI接口,遇到点问题,想请教一下,有联系方式吗?

出0入0汤圆

发表于 2011-11-10 15:59:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-16 09:24:04 | 显示全部楼层
mark!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 16:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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