久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

STM8S 硬件SPI驅(qū)動(dòng)74HC595

作者:特大老虎   來(lái)源:會(huì)員整理上傳   點(diǎn)擊數(shù):  更新時(shí)間:2014年05月22日   【字體:

   一直對(duì)STM8S的硬件SPI感興趣,但沒(méi)有真正使用過(guò),以往都是用IO口模擬,這次剛好有個(gè)板子上有兩個(gè)595驅(qū)動(dòng)的8位LED數(shù)碼管,就在上面試了一把,把過(guò)程記錄一下。

 

      硬件接線圖:

 




 
      595是數(shù)據(jù)接收器件,所以MCU只用了3條線與之相連,分別是MOSI接SER,SCK接CLK,NSS接RCK。其實(shí)這里RCK可以用其他的IO口的。
      相關(guān)的代碼:
 
      LOCAL uint8 DISP_BUF[8]={0,1,2,3,4,5,6,7};             //顯示緩沖區(qū)
      PUBLIC uint8 DISP_TAB[]=                                      //顯示碼表
      {
               0x14,0xD7,0x4C,0x45,0x87,0x25,0x24,0x57,0x04,0x05,0x06,0xA4,0x3C
      };
      相關(guān)的IO口設(shè)為上拉輸出
      LOCAL void gpio_init(void)
      {
          GPIO_DeInit(GPIOC);
          GPIO_Init(GPIOC,GPIO_PIN_5|GPIO_PIN_6,GPIO_MODE_OUT_PP_LOW_FAST);
          GPIO_DeInit(GPIOE);
          GPIO_Init(GPIOE,GPIO_PIN_5,GPIO_MODE_OUT_PP_LOW_FAST);
      }
 
      SPI初始化
      LOCAL void spi_init(void)
     {
          SPI_DeInit();
          CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, ENABLE);
   
          SPI_Init(SPI_FIRSTBIT_LSB, SPI_BAUDRATEPRESCALER_256, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_LOW, SPI_CLOCKPHASE_1EDGE, SPI_DATADIRECTION_1LINE_TX, SPI_NSS_SOFT, 0x07);
          SPI_Cmd(ENABLE);
      }
      顯示程序
      PUBLIC void DISP_Display(void)
      {
          uint8 i,dig = 0x80;
   
          for (i=0;i<8;i++)
          {
              GPIO_WriteLow(GPIOE,GPIO_PIN_5);
              while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
              SPI_SendData(DISP_TAB[DISP_BUF[i]]);      
              while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
              SPI_SendData(dig);
              while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
              GPIO_WriteHigh(GPIOE,GPIO_PIN_5);
              delay(20);
              dig >>= 1;
          }
      }
 
     編譯運(yùn)行,出現(xiàn)的字符如下:
         
      用示波器看了下,MOSI腳和SCK腳的波形正常。猜想是硬件SPI的速度太快,595跟不上。于是修改代碼,在兩次發(fā)送數(shù)據(jù)之后都延時(shí)一下。
      PUBLIC void DISP_Display(void)
      {
          uint8 i,dig = 0x80;
   
          for (i=0;i<8;i++)
          {
              GPIO_WriteLow(GPIOE,GPIO_PIN_5);
              while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
              SPI_SendData(DISP_TAB[DISP_BUF[i]]);    
              delay(500);  
              while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
              SPI_SendData(dig);
              delay(500); 
              while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
              GPIO_WriteHigh(GPIOE,GPIO_PIN_5);
              delay(20);
              dig >>= 1;
          }
      }
 
      再次編譯運(yùn)行,顯示如下:
     
        
 
        結(jié)論:
        1. STM8S 硬件SPI的速度較快,實(shí)際應(yīng)用的時(shí)候需要考慮外部設(shè)備的響應(yīng)速度問(wèn)題。
        2. while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);只能保證每次SPI發(fā)送數(shù)據(jù)前,發(fā)送緩沖區(qū)是空的,即上次數(shù)據(jù)已經(jīng)發(fā)送完成,但不能保證外部設(shè)備正確接收了數(shù)據(jù)。
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 四虎在线免费观看 | 日韩精品一区二区三区免费视频 | 国产欧美精品一区二区色综合 | 在线a | 日韩免费小视频 | 免费毛片基地 | 色婷婷在线视频 | 亚洲成人免费视频 | 久久久久久久综合 | 日韩色在线 | 91成年人| 成人免费在线视频观看 | 亚洲精品不卡 | 亚洲精品久久久久久久久久久 | 福利视频午夜 | 国产欧美激情 | 性色av网站 | 欧美国产精品一区二区 | 一级毛片黄色 | 九九在线精品 | 波多野结衣一区二区三区 | 久久综合国产 | 久久久亚洲一区 | 国产免费成人 | www.操 | 亚洲精选在线观看 | 日韩在线视频免费观看 | 日韩午夜在线观看 | 欧美一区二区在线播放 | 伊人久久综合 | 毛片资源 | 黄色天天影视 | 国产草草影院 | 成年人视频在线免费观看 | 天天艹夜夜艹 | 欧美成人xxx | 毛片视频免费观看 | 天天碰天天操 | 亚洲一区二区av | 亚洲成人精品一区 | 国产精品一区二区性色av |