AP ... spi " />
<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 4474|回復: 1
    打印 上一主題 下一主題

    [提問] spi

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2013-1-28 14:57:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: stm32 , spi
    #include
    #include "sys.h"
    #include "usart.h"               
    #include "delay.h"
    #include "stm32f10x_spi.h"
    //2012.12.5開始 12.10 stm32正常
    void SPI2init()
    {
            RCC->APB2ENR|=0x00000028;//使能時鐘GPIOB,D時鐘
            RCC->APB1ENR|=1<<14;//使能SPI2口時鐘
           
            GPIOB->CRH&=0x000FFFFF;        //PB13,14,15初始給高電平
            GPIOB->CRH|=0xBBB00000;        //
            GPIOB->ODR|=0x0000E000;//初始為高電平
           
            GPIOB->CRH&=0x000FFFFF;        //PB13,14,15復用 50HZ 推挽輸出
            GPIOB->CRH|=0xBBB00000;

            SPI2->CR1=0x0000;//全部清零
            /*SPI2->CR1|=0x023E;//選擇STM32為主設備,256分頻,從第1個跳變開始采樣,SCK空閑時為高電平,nss軟件管理, 16bit讀寫
            SPI2->CR1&=0<<8;
            SPI2->CR1|=0x0040;//SPI使能*/
            SPI2->CR1|=0<<10;//全雙工模式       
            SPI2->CR1|=1<<9; //軟件nss管理
            SPI2->CR1|=1<<8;  

            SPI2->CR1|=1<<2; //SPI主機
            SPI2->CR1|=0<<11;//8bit數據格式       
            SPI2->CR1|=1<<1; //空閑模式下SCK為1 CPOL=1
            SPI2->CR1|=1<<0; //數據采樣從第二個時間邊沿開始,CPHA=1  
            SPI2->CR1|=7<<3; //Fsck=Fcpu/256
            SPI2->CR1|=0<<7; //MSBfirst   
            SPI2->CR1|=1<<6; //SPI設備使能
    }

    void SPI1init()
    {
            RCC->APB2ENR|=0x00001004;//使能SPI1時鐘,GPIOA時鐘

            GPIOA->CRL&=0x000fffff;                                                       
            GPIOA->CRL|=0xBBB000000;

            SPI1->CR1=0x0000;//全部清零
            SPI1->CR1|=1<<9;//nss軟件管理
            SPI1->CR1|=0<<8;//nss置位
            SPI1->CR1|=1<<1; //空閑模式下SCK為1 CPOL=1
            SPI1->CR1|=1<<0; //數據采樣從第二個時間邊沿開始,CPHA=1
            SPI1->CR1|=0<<11;//8bit數據格式
            SPI1->CR1|=0<<2; //SPI從機
            SPI1->CR1|=0<<7; //MSBfirst
            SPI1->CR1|=1<<6;//使能
    }
    u8 SPI2_ReadWriteByte(u8 TxData)
    {
            u8 retry=0;
            while((SPI2->SR&1<<1)==0)//等待發送區空
            {
                    retry++;
                    if(retry>200)return 0;
            }
                    SPI2->DR=0xff; //發送一個byte
                    retry=0;
            while((SPI2->SR&1<<0)==0) //等待接收完一個byte
            {
            retry++;
            if(retry>200)return 0;
            }
                    return SPI2->DR; //返回收到的數據
    }
    u8 SPI1_ReadWriteByte(u8 TxData)
    {
            u8 retry=0;
            while((SPI1->SR&1<<1)==0)//等待發送區空
            {
                    retry++;
                    if(retry>200)return 0;
            }
                    SPI1->DR=(u16)TxData; //發送一個byte
                    retry=0;
            while((SPI1->SR&1<<0)==0) //等待接收完一個byte
            {
            retry++;
            if(retry>200)return 0;
            }
                    return SPI1->DR; //返回收到的數據
    }
    int main(void)
    {       
            u8 test=0;
              Stm32_Clock_Init(9);//系統時鐘設置
            delay_init(72);                //延時初始化
            SPI2init();
            SPI1init();
            while(test==0)
            {
                    SPI2_ReadWriteByte(0xff);
                    test=SPI1_ReadWriteByte(0x00);
                    delay_ms(10);
            }
    }

    我把兩個SPI直接連接在了一起,結果發現收到的死活都是test==0,不知道哪里錯了,希望各位斧正

    沙發
    發表于 2013-3-17 14:04:54 | 只看該作者
    同等高手解答~~~
    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷