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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3710|回復: 0
打印 上一主題 下一主題
收起左側

STM32模擬I2C總線程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:302749 發表于 2018-4-6 14:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STM32模擬I2C總線程序,測試可用

單片機源程序如下:
  1. #include  <includes.h>
  2. #include "myiic.h"
  3. #include "delay.h"
  4. #define SCL_H         GPIOB->BSRR = GPIO_Pin_6  
  5. #define SCL_L         GPIOB->BRR  = GPIO_Pin_6   
  6.          
  7. #define SDA_H         GPIOB->BSRR = GPIO_Pin_7  
  8. #define SDA_L         GPIOB->BRR  = GPIO_Pin_7  
  9.       
  10. #define SCL_read      GPIOB->IDR  & GPIO_Pin_6  
  11. #define SDA_read      GPIOB->IDR  & GPIO_Pin_7  

  12. OS_SEM        IIC_SemLock;

  13. //初始化IIC
  14. void IIC_Init(void)
  15. {                       
  16.                 OS_ERR err = OS_ERR_NONE;
  17.                 GPIO_InitTypeDef GPIO_InitStructure;
  18.                 RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );       
  19.                          
  20.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
  21.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD ;   //推挽輸出
  22.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  23.                 GPIO_Init(GPIOB, &GPIO_InitStructure);
  24.                 GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);         //PB6,PB7 輸出高
  25.                 OSSemCreate(&IIC_SemLock,"",1,&err);
  26. }

  27. void IIC_Lock(void)
  28. {
  29.                 OS_ERR err = OS_ERR_NONE;
  30.     OSSemPend(&IIC_SemLock,0,OS_OPT_PEND_BLOCKING,NULL,&err);
  31. }

  32. void IIC_UnLock(void)
  33. {
  34.                 OS_ERR err = OS_ERR_NONE;
  35.                 OSSemPost(&IIC_SemLock,OS_OPT_POST_ALL,&err);
  36. }

  37. u8 IIC_Start(void)  
  38. {  
  39.     SDA_H;  
  40.     SCL_H;  
  41.     delay_us(5);
  42.     if(!SDA_read)return 0;
  43.     SDA_L;  
  44.     delay_us(5);
  45.     if(SDA_read)return 0;  
  46.     SDA_L;  
  47.     delay_us(5);
  48.     return 1;  
  49. }  

  50. void IIC_Stop(void)  
  51. {  
  52.     SCL_L;  
  53.     delay_us(5);
  54.     SDA_L;  
  55.     delay_us(5);
  56.     SCL_H;  
  57.     delay_us(5);
  58.     SDA_H;  
  59.     delay_us(5);
  60. }  

  61. void IIC_Ack(void)  
  62. {     
  63.     SCL_L;  
  64.     delay_us(5);
  65.     SDA_L;  
  66.     delay_us(5);
  67.     SCL_H;  
  68.     delay_us(5);
  69.     SCL_L;  
  70.     delay_us(5);
  71. }  

  72. void IIC_NoAck(void)  
  73. {     
  74.     SCL_L;  
  75.     delay_us(5);
  76.     SDA_H;  
  77.     delay_us(5);
  78.     SCL_H;  
  79.     delay_us(5);
  80.     SCL_L;  
  81.     delay_us(5);
  82. }  

  83. u8 IIC_WaitAck(void)     
  84. {  
  85.                
  86.     SCL_L;  
  87.     delay_us(5);
  88.     SDA_H;            
  89.     delay_us(5);
  90.     SCL_H;  
  91.     delay_us(5);
  92.     if(SDA_read)  
  93.     {  
  94.         SCL_L;  
  95.         return 0;  
  96.     }  
  97.     SCL_L;  
  98.     return 1;  
  99. }  

  100. void IIC_SendByte(u8 SendByte)   
  101. {  
  102.     u8 i=8;  
  103.     while(i--)  
  104.     {  
  105.         SCL_L;  
  106.         delay_us(5);
  107.         if(SendByte&0x80)  
  108.             SDA_H;   
  109.         else  
  110.             SDA_L;     
  111.         SendByte<<=1;  
  112.         delay_us(5);
  113.         SCL_H;  
  114.         delay_us(5);
  115.     }  
  116.     SCL_L;  
  117. }  

  118. u8 IIC_ReceiveByte(void)   
  119. {   
  120.     u8 i=8;  
  121.     u8 ReceiveByte=0;  
  122.     SDA_H;               
  123.     while(i--)  
  124.     {  
  125.         ReceiveByte<<=1;        
  126.         SCL_L;  
  127.         delay_us(5);
  128.         SCL_H;  
  129.         delay_us(5);     
  130.         if(SDA_read)  
  131.         {  
  132.             ReceiveByte|=0x01;  
  133.         }  
  134.     }  
  135.     SCL_L;  
  136.     return ReceiveByte;  
  137. }  

  138. u8 IIC_BufferRead(u8* pBuffer,u16 length,u8 DeviceAddress)  
  139. {  
  140.     if(!IIC_Start())return 0;  
  141.     IIC_SendByte(DeviceAddress|0x01);  
  142.     if(!IIC_WaitAck())  
  143.                 {  
  144.                                 IIC_Stop();   
  145.                                 return 0;  
  146.                 }
  147.                 while(length)
  148.                 {
  149.                                 *pBuffer++=IIC_ReceiveByte();
  150.                                 length--;
  151.                                 if(length>0)IIC_Ack();
  152.                                 else IIC_NoAck();
  153.                 }
  154.     IIC_Stop();
  155.                 delay_ms(1);
  156.     return 1;  
  157. }

  158. u8 IIC_BufferWrite(u8* pBuffer, u16 length, u8 DeviceAddress)  
  159. {  
  160.     if(!IIC_Start())return 0;  
  161.     IIC_SendByte(DeviceAddress);
  162.     if(!IIC_WaitAck())  
  163.                 {  
  164.                                 IIC_Stop();   
  165.                                 return 0;  
  166.                 }  
  167.                 while(length)
  168.                 {
  169.                                 IIC_SendByte(* pBuffer);  
  170.                                 IIC_WaitAck();  
  171.                                 length--;
  172.                                 pBuffer++;
  173.                 }
  174.     IIC_Stop();
  175.                 delay_ms(5);
  176.     return 1;  
  177. }
  178. ……………………

  179. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
IIC.rar (1.86 KB, 下載次數: 36)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美区日韩区 | 亚洲一区视频在线 | 在线亚洲欧美 | 午夜男人的天堂 | 亚洲性综合网 | 亚洲电影一区二区三区 | 成人一区av| 99综合| 九九在线视频 | 熟女毛片 | 中文字幕专区 | 国户精品久久久久久久久久久不卡 | 81精品国产乱码久久久久久 | 亚洲精品在线视频 | 国产成人精品a视频一区www | 成人免费视频网站在线观看 | 日韩免费 | 欧美一级黄色片 | 久久久精品视 | 欧洲视频一区二区 | 亚洲欧美日韩精品久久亚洲区 | 亚洲一级毛片 | 久草久 | www.色综合 | 女人av| 一区中文字幕 | 欧美一区视频 | 免费一区在线观看 | 精品久久久久久久 | 欧美午夜精品 | 在线看免费的a | 一级片在线观看 | 在线不卡 | 久久久精品在线 | 日韩a| 精品国产一区二区三区免费 | 亚洲精品久久久久久久久久久久久 | 91免费在线看 | 欧美日韩亚洲视频 | 国产精品久久久久久久久污网站 | 91精品一区二区 |