娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月31日(星期六)

2018年05月31日 | STM8S1003 模擬SPI 驅(qū)動 SI4432

發(fā)布者:Lihua1314520 來源: eefocus關鍵字:STM8S1003  模擬SPI  驅(qū)動  SI4432 手機看文章 掃描二維碼
隨時隨地手機看文章

網(wǎng)上關于stm8s1003 驅(qū)動si4432的 驅(qū)動不是很多 ,我也是弄了大半天才可以和si4432 spi驅(qū)動成功。 接下來要做無線收發(fā)和組網(wǎng)。

暫時先貼 spi驅(qū)動的

spi模擬方式:

main.c

#include "stm8s.h"  

#include "mytype.h"  

#include"delay.h"  

#include "USART.h"  

  

//定義CPU內(nèi)部時鐘  

#define  SYS_CLOCK    16  

  

#define  SPIPort  GPIOC  

#define  nMOSI  6  

#define  nMISO  7  

#define  nSCLK  5  

#define  nCS    4  

#define  MISO_G   gbi(SPIPort->IDR,nMISO)  

#define  MOSI_H   sbi(SPIPort->ODR,nMOSI)  

#define  MOSI_L   cbi(SPIPort->ODR,nMOSI)  

#define  SCLK_H   sbi(SPIPort->ODR,nSCLK)  

#define  SCLK_L   cbi(SPIPort->ODR,nSCLK)  

#define  CS_H     sbi(SPIPort->ODR,nCS)  

#define  CS_L     cbi(SPIPort->ODR,nCS)  

  

  

  

void CLOCK_Config(u8 SYS_CLK);  

  

/************************************************************************** 

 * 函數(shù)名:SPI_Init 

 * 描述  :SPI模塊發(fā)送函數(shù) 

 * 輸入  :無 

 * 返回  :無 

 *************************************************************************/  

void  SPI_Init(void)  

{  

        

      cbi(SPIPort->DDR,nMISO);//MISO INPUT  

      sbi(SPIPort->CR1,nMISO);  

        

      sbi(SPIPort->DDR,nMOSI);//MOSI OUTPUT  

      sbi(SPIPort->CR1,nMOSI);  

        

      sbi(SPIPort->DDR,nSCLK);//SCLK OUTPUT  

      sbi(SPIPort->CR1,nSCLK);  

    

      sbi(SPIPort->DDR,nCS);//CS OUTPUT  

      sbi(SPIPort->CR1,nCS);  

}  

  

/************************************************************************** 

 * 函數(shù)名:SPI_SendByte 

 * 描述  :SPI模塊發(fā)送函數(shù) 

 * 輸入  :發(fā)送數(shù)據(jù) 

 * 返回  :返回數(shù)據(jù) 

 *************************************************************************/  

u8 SPI_SendByte(u8 byte)  

{       

      u8 i = 0;  

      u8 bit_r = 0;   

      for(i=0;i<8;i++)   // output 8-bit  

      {   

        //MOSI_PIN=byte & 0x80;     //output 'byte' MSB to MOSI_PIN  

        if(byte & 0x80)  

            MOSI_H;  

        else  

            MOSI_L;  

            

          byte <<= 1;                 // shift next bit into MSB..  

            

          SCLK_H;  

           

          bit_r<<=1;  

          if(MISO_G) bit_r++;  

                      

         SCLK_L;  

            

        //SCK_PIN=1 ;               // Set SCK_PIN high..  

        //byte|=MISO_PIN;           // capture current MISO_PIN bit  

        //SCK_PIN=0;                // then set SCK_PIN low again  

      }  

      return(bit_r);                        // return read byte  

}  

  

  

  

/************************************************************************** 

 * 函數(shù)名:SPI_ReadRegister 

 * 描述  :SPI讀取寄存器數(shù)值 

 * 輸入  :寄存器地址 

 * 返回  :數(shù)據(jù) 

 *************************************************************************/  

u8 SPI_ReadRegister (u8 addr)  

{  

    u8 Result;  

   

    CS_L;    //nSEL = 0;    

  

    SPI_SendByte(addr);        //write data into the SPI register  

    Result = SPI_SendByte(0xFF);  

  

    CS_H;    //nSEL = 1;  

    return(Result);  

}  

  

/************************************************************************** 

 * 函數(shù)名:SPI_WriteRegister 

 * 描述  :SPI寫寄存器數(shù)值 

 * 輸入  :寄存器地址,數(shù)值 

 * 返回  :無 

 *************************************************************************/  

void SPI_WriteRegister (u8 addr, u8 value)  

{  

   

    CS_L;                  //nSEL = 1;                               

          

    SPI_SendByte(addr|0x80);            //write data into the SPI register    

    SPI_SendByte(value);  

  

    CS_H;                  //nSEL = 1;  

  

}  

  

/************************************************************************** 

 * 函數(shù)名:main 

 * 描述  :主函數(shù) 

 * 輸入  :無 

 * 返回  :無 

 *************************************************************************/  

int main(void)  

{       

      u8 temp = 0;  

        

      CLOCK_Config(SYS_CLOCK);//系統(tǒng)時鐘初始化    

      UART_Init(SYS_CLOCK,9600);  

      SPI_Init();  

    

      while(1)  

      {     

  

        temp =  SPI_ReadRegister(0x00);  

        delay_ms(100);  

        UART_SendChar(temp);  

          

        temp =  SPI_ReadRegister(0x09);  

        delay_ms(100);  

        UART_SendChar(temp);  

      }  

          

}  

  

/************************************************************************** 

 * 函數(shù)名:CLOCK_Config 

 * 描述  :系統(tǒng)內(nèi)部時鐘配置 SYS_CLK : 2、4、8、16  系統(tǒng)啟動默認內(nèi)部2MHZ 

 * 輸入  :無 

 * 返回  :無 

 *************************************************************************/  

void CLOCK_Config(u8 SYS_CLK)  

{  

   //時鐘配置為內(nèi)部RC,16M  

   CLK->CKDIVR &=~(BIT(4)|BIT(3));  

    

   switch(SYS_CLK)  

   {  

      case 2: CLK->CKDIVR |=((1<<4)|(1<<3)); break;  

      case 4: CLK->CKDIVR |=(1<<4); break;  

      case 8: CLK->CKDIVR |=(1<<3); break;  

   }  

}  

#include "mytype.h"

[cpp] view plain copy

#ifndef __MyType_H  

#define __MyType_H  

  

  

#ifndef BIT  

#define BIT(x)  (1 << (x))  

#endif  

  

/* io configs */  

#ifndef sbi    

#define sbi(io,bit)     ( io  |=  (1<

//example:sbi(GPIOA->ODR,0);sbi(GPIOA->DDR,0);  

#endif   

  

#ifndef cbi    

#define cbi(io,bit)     ( io  &= ~(1<

//example:cbi(GPIOA->ODR,0);cbi(GPIOA->DDR,0);  

#endif   

  

#ifndef xor    

#define xor(port, bit)          (port) ^= (1 << (bit))  

#endif  

  

#ifndef gbi    

#define gbi(pin ,bit)   ( pin &   (1<

//example: gbi(GPIOA->IDR,0);  

#endif   

  

  

#endif  


#include"delay.h"

#include"delay.h"  

  

/*********************** 

函數(shù)功能:us延時 

輸入?yún)?shù):無 

輸出參數(shù):無 

備    注:粗略延時 

***********************/  

void delay_us(void)  

{   

    asm("nop"); //一個asm("nop")函數(shù)經(jīng)過示波器測試代表100ns  

    asm("nop");  

    asm("nop");  

    asm("nop");   

}  

  

/*********************** 

函數(shù)功能:ms延時 

輸入?yún)?shù):無 

輸出參數(shù):無 

備    注:粗略延時 

***********************/  

void delay_ms(unsigned int time)  

{  

    unsigned int i;  

    while(time--)    

    for(i=900;i>0;i--)  

    delay_us();   

}  


#include "USART.h"


#include "USART.h"  

#include "ALL_Includes.h"  

  

  

/************************** 

函數(shù)功能:初始化UART 

輸入?yún)?shù):SYS_Clk:系統(tǒng)時鐘(2,4,8,16) 

         baud:   波特率 

輸出參數(shù):無 

備    注:無 

***************************/  

void UART_Init(u8 SYS_Clk, u32 baud)  

{     

    u16 UART_Temp;  

    

    UART_IOConfig();//UART IO引腳初始化   

    

    UART1->CR2 = 0;// 禁止UART發(fā)送和接收  

    UART1->CR1 = 0;// b5 = 0,允許UART  b2 = 0,禁止校驗  

                                                        

    UART1->CR3 = 0;// b5,b4 = 00,1個停止位  

                              

/**************************************************  

    設置波特率,必須注意以下幾點: 

    (1) 必須先寫B(tài)RR2 

    (2) BRR1存放的是分頻系數(shù)的第11位到第4位, 

    (3) BRR2存放的是分頻系數(shù)的第15位到第12位,和第3位到第0位 

    例如對于波特率位9600時,分頻系數(shù)=2000000/9600=208 

    對應的十六進制數(shù)為00D0,BBR1=0D,BBR2=00 

*************************************************/   

      

    UART_Temp = SYS_Clk*1000000/baud;  

      

    UART1->BRR2 = (u8)((UART_Temp&0x000F)|((UART_Temp&0xF000)>>8));  

    UART1->BRR1 = (u8)((UART_Temp&0x0FF0)>>4);  

                                                   

                                      

    UART1->CR2 = 0x2C; // b3 = 1,允許發(fā)送  

                       // b2 = 1,允許接收  

                       // b5 = 1,允許產(chǎn)生接收中斷   

}  

  

/************************************** 

函數(shù)功能:從UART3發(fā)送一個字符 

輸入?yún)?shù):ch -- 要發(fā)送的字符 

輸出參數(shù):無 

備    注:無 

***************************************/  

void UART_SendChar(unsigned char ch)  

{  

     while((UART1->SR & 0x80) == 0x00);  // 若發(fā)送寄存器不空,則等待  

     UART1->DR = ch;                     // 將要發(fā)送的字符送到數(shù)據(jù)寄存器    

}  

  

/*********************************** 

函數(shù)功能:UART IO口初始化 

輸入?yún)?shù):無 

輸出參數(shù):無 

備   注:IO在輸出模式下,可通過CR2寄存器 

         控制輸出速率 

***********************************/  

void UART_IOConfig(void)  

{   

    TXPort->DDR |= TXPin;//輸出模式  

    TXPort->CR1 |= TXPin;//推挽輸出     

      

    RXPort->DDR &=~RXPin;//輸入模式  

    RXPort->CR1 &=~RXPin;//浮空輸入  

}  

  

  


#ifndef  _USART_H  

#define  _USART_H  

  

#include "ALL_Includes.h"  

  

//定義UART的TX、RX引腳  

#define  TXPort  GPIOD  

#define  TXPin   (1 << 5)   

#define  RXPort  GPIOD  

#define  RXPin   (1 << 6)  

  

void UART_Init(u8 SYS_Clk, u32 baud);  

void UART_SendChar(unsigned char ch);  

void UART_IOConfig(void);  

  

  

#endif  



關鍵字:STM8S1003  模擬SPI  驅(qū)動  SI4432 引用地址:STM8S1003 模擬SPI 驅(qū)動 SI4432

上一篇:淺談STM8S(1)——I2C配置
下一篇:stm8——串口printf的實現(xiàn)

推薦閱讀

  近日,激光電視價格不斷刷新紀錄,繼極米科技發(fā)布萬元級1080p激光電視(不含幕布)之后,海信也發(fā)布了兩萬元以內(nèi)的4K激光電視(含幕布),激光電視價格下滑的趨勢不可阻擋。下面就隨嵌入式小編一起來了解一下相關內(nèi)容吧。  有意思的是,在激光電視尺寸和價格不斷下探的同時,液晶電視伴隨著尺寸的提升,價格也在不斷下降,兩者在價格和尺寸上正處于一個...
近日,廣州南沙經(jīng)濟技術(shù)開發(fā)區(qū)管理委員會與電裝(廣州南沙)有限公司正式簽訂《關于電裝(廣州南沙)有限公司華南新廠區(qū)項目投資合作協(xié)議書》。 據(jù)羊城晚報報道,根據(jù)《協(xié)議書》,電裝(廣州南沙)有限公司將分兩期投資不少于20億元人民幣,在黃閣鎮(zhèn)新建用地規(guī)模約為10萬平方米的華南新廠區(qū),提前布局新能源汽車相關產(chǎn)業(yè)。據(jù)悉,該項目將于6月28日動工。 ...
協(xié)作機器人夾爪制造商OnRobot推出2.5D視覺系統(tǒng)Eyes,適用于各家先進機器手臂,提供外加的深度感知和零件辨識功能。 據(jù)報導,機器手臂經(jīng)常遇到的難題,就是無法拾放大小、形狀或擺放方向不一的物品,通常需要外加夾具、送料盤等其它硬件協(xié)助作業(yè),但也因此增加作業(yè)成本和復雜度,局限了設備的應用范圍。 OnRobot新推出的2.5D視覺系統(tǒng)Eyes,只要照一張...
全面開啟數(shù)字化轉(zhuǎn)型之旅應用基于AI的技術(shù),助力創(chuàng)建更安全、智能和乘客友好型的鐵路網(wǎng)絡鐵路是可持續(xù)交通運輸系統(tǒng)的支柱。在全球范圍內(nèi),這種依靠鋼輪在鋼軌滾動的運輸方式歷史悠久。鐵路交通具有安全、可靠的特點,一直是人員和貨物輸送的主要方式?,F(xiàn)下,鐵路運輸仍在持續(xù)發(fā)展。這意味著到2024年,全球鐵路客運市場規(guī)模預計將達2520億美元,鐵路貨運市場...

史海拾趣

小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 民勤县| 建水县| 晋城| 昌邑市| 泗洪县| 甘洛县| 阳春市| 太康县| 沭阳县| 芦山县| 凤庆县| 石河子市| 安图县| 苏尼特右旗| 台州市| 临武县| 孝义市| 湖州市| 兴隆县| 尖扎县| 马鞍山市| 昌图县| 赤壁市| 嵩明县| 内乡县| 中江县| 汤阴县| 山阳县| 巴林左旗| 普宁市| 大理市| 绥德县| 元朗区| 伊金霍洛旗| 邯郸县| 呼伦贝尔市| 岳普湖县| 荃湾区| 固原市| 通州区| 双江|