frankrein

    1. STM32的SPI驱动加速度芯片LIS33DE 5/7104 stm32/stm8 2011-02-17
                                       主要是写寄存器的时候.CS拉低后没加延迟,还有CS拉高结束之前要加入延迟. 虽然手册上写得是5ns左右.按道理说,没加也没事. 我觉得用GPIO拉低CS线,速度比较慢.而SPI发送数据比较快.所以造成片选延迟不够. 下面是我写的程序 /*                    库文件驱动说明         */ /*    意法lis3lv02qd传感器的CS片选       */ #define Lis_Cs_High         GPIO_SetBits(GPIOB,GPIO_Pin_7) #define Lis_Cs_Low                GPIO_ResetBits(GPIOB,GPIO_Pin_7) /*************** SPI0 写命令************************/ void SPI_Write(uint16_t address,uint16_t dat)   {                                                                                                Lis_Cs_Low;                Delay(5);                             SPI2->DR=address;              while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);        //等待发送缓存空标志         SPI2->DR=dat;         while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);        //等待发送缓存空标志            Delay(10);                 Lis_Cs_High;              } /************* SPI读两字节命令 ****************/ int16_t SPI_Read(int16_t address) {                        int16_t dat=0;         Lis_Cs_Low;                            //片选拉低         Delay(1);                 while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);                           SPI2->DR=address;                while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);                 SPI2->DR=0xff;                                while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);         dat= SPI2->DR;         SPI2->DR=0xff;         dat<<=8;                                while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);                 dat|=SPI2->DR;         Delay(2);         Lis_Cs_High;                  //片选拉高                     return  dat;                   //返回dat } /*  lis3lv02qd SPI初始化函数         */ void SPI_Lis3_Init()                {         SPI_InitTypeDef  SPI_InitStructure;         GPIO_InitTypeDef GPIO_InitStructure;                          /* 使能SPI2  GPIOB 的时钟 */         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);                          /* Configure SPI1 pins: SCK, MISO and MOSI */         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_15 ;                //Pin_5是SCK时钟 Pin7是MOSI输出信号         GPIO_InitStructure.GPIO_Speed =GPIO_Speed_10MHz;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                         //设成复用推挽         GPIO_Init(GPIOB, &GPIO_InitStructure);                                  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 ;             //MISO                                                                                   ;                //Pin_5是SCK时钟 Pin7是MOSI输出信号,设成复用推挽         GPIO_InitStructure.GPIO_Speed =GPIO_Speed_10MHz;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                        //上拉输入         GPIO_Init(GPIOB, &GPIO_InitStructure);                           GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;                   // lis3 的片选脚         GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         GPIO_Init(GPIOB, &GPIO_InitStructure);                                                  SPI_InitStructure.SPI_Direction =SPI_Direction_2Lines_FullDuplex;         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low ;         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;         SPI_InitStructure.SPI_CRCPolynomial = 7;                              SPI_Init(SPI2, &SPI_InitStructure);                  SPI_Cmd(SPI2,ENABLE);         SPI_SSOutputCmd(SPI2,DISABLE); } void Lis3_Init() {         SPI_Lis3_Init();                  //初始化SPI设置                //Delay(1000);                  SPI_Write(0x20,0xD7);          //CTRL_REG1         SPI_Write(0x21,0x15);           //CTRL_REG2  15四线模式,17三线模式                    }
    2.                                  请问你的硬件环境是什么?有电路图和板子的图片吗? 系统的供电是什么? 怀疑你的电源部分不稳定。
    3. EXTI如何判断是中断是上升还是下降 22/14085 stm32/stm8 2010-09-29
                                       版主主太敬业了,居然用手机上网回答大家的疑难。
    4. 向大家请教一下! 4/3740 微控制器 MCU 2010-09-09
      呵呵,支持一下!!!
    5.                                  可以。
    6. FPGA综合仿真错误 5/3779 嵌入式系统 2010-04-11
      资源不够 应该是器件选错了 或者代码里面申请了过多的资源
    7. fat32根目录跨簇的问题 5/3693 嵌入式系统 2010-03-25
      F8 FF FF 0F FF FF FF 0F 03 00 00 00 FF FF FF 0F FF FF FF 0F FF FF FF 0F 00 00 00 00 00 00 00 00 这样就可以了
    8. 卖几个AVR单片机和一本《深入浅出MFC》书 9/3476 嵌入式系统 2010-03-24
      支持!,呵呵。
    9. usb转串口 33/6120 嵌入式系统 2010-03-15
      USB转串口装完驱动后 会在系统内仿真几个串行口设备 只要你的软件可以挑选/设置用哪个串口 就可以
    10. CodeSourcery免费吗 3/4630 stm32/stm8 2010-03-12
                                       这个应该不犯法吧
    11. 有别的设备吗?换个设备试试看,怀疑是设备本身的问题啊。 用ActiveSync应该是没有问题的。
    12. 团队接WINCE,LINUX方面的嵌入式开发 46/15619 Linux开发 2010-03-03
      帮顶一下............
    13. 每天回帖即可获得10分可用分!
    14. ARM的高效除法 7/4474 ARM技术 2010-02-24
      编译器没有自带的DIV
    15. 春节散分,顺便认认这里的大虾 15/5150 嵌入式系统 2010-02-09
      地板?JF..>>>> 回复内容太短了!
    16. WINCE中存的图,在win32的程序里调不出来?? 12/5314 嵌入式系统 2010-01-31
      估计WinCE保存的时候有问题,去看看BMP的结构。
    17. 如果没有并口就买个JLINK,然后再写个ADS的程序烧FLASH。 JLINK等软件可能会提供一些写NAND的功能,但是ECC是否符合BSP的规则就难讲了
    18. Wince如何订制taskbar? 12/5642 嵌入式系统 2009-12-24
      mark 学习下。。
    19. 2440 按键驱动问题 24/5660 嵌入式系统 2009-11-13
      上班时间没法搞 只能等晚上了 明天不上班,准备好好弄下 不过我也是菜鸟,相互学习吧!!!!!
    20. wince5.0环境下对话框中显示图片问题 7/3869 嵌入式系统 2009-10-16
      将画图片的代码写在OnPaint()中

最近访客

< 1/1 >

统计信息

已有92人来访过

  • 芯积分:--
  • 好友:--
  • 主题:11
  • 回复:62

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言