找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2201|回复: 1
收起左侧

stm32f103zet6 IIC协议实验

[复制链接]
ID:372362 发表于 2018-7-16 10:40 | 显示全部楼层 |阅读模式
单片机源程序如下:
  1. #include "myiic.h"
  2. #include "delay.h"

  3. //初始化IIC
  4. void IIC_Init(void)
  5. {                                             
  6.         GPIO_InitTypeDef GPIO_InitStructure;
  7.         RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );        //使能GPIOB时钟
  8.           
  9.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
  10.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;  //推挽输出
  11.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  13.         GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);         //PB6,PB7 输出高
  14. }
  15. //产生IIC起始信号
  16. void IIC_Start(void)
  17. {
  18.         SDA_OUT();     //sda线输出
  19.         IIC_SDA=1;                    
  20.         IIC_SCL=1;
  21.         delay_us(4);
  22.         IIC_SDA=0;//START:when CLK is high,DATA change form high to low
  23.         delay_us(4);
  24.         IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
  25. }          
  26. //产生IIC停止信号
  27. void IIC_Stop(void)
  28. {
  29.         SDA_OUT();//sda线输出
  30.         IIC_SCL=0;
  31.         IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
  32.         delay_us(4);
  33.         IIC_SCL=1;
  34.         IIC_SDA=1;//发送I2C总线结束信号
  35.         delay_us(4);                                                                  
  36. }
  37. //等待应答信号到来
  38. //返回值:1,接收应答失败
  39. //        0,接收应答成功
  40. u8 IIC_Wait_Ack(void)
  41. {
  42.         u8 ucErrTime=0;
  43.         SDA_IN();      //SDA设置为输入  
  44.         IIC_SDA=1;delay_us(1);          
  45.         IIC_SCL=1;delay_us(1);         
  46.         while(READ_SDA)
  47.         {
  48.                 ucErrTime++;
  49.                 if(ucErrTime>250)
  50.                 {
  51.                         IIC_Stop();
  52.                         return 1;
  53.                 }
  54.         }
  55.         IIC_SCL=0;//时钟输出0           
  56.         return 0;  
  57. }
  58. //产生ACK应答
  59. void IIC_Ack(void)
  60. {
  61.         IIC_SCL=0;
  62.         SDA_OUT();
  63.         IIC_SDA=0;
  64.         delay_us(2);
  65.         IIC_SCL=1;
  66.         delay_us(2);
  67.         IIC_SCL=0;
  68. }
  69. //不产生ACK应答                    
  70. void IIC_NAck(void)
  71. {
  72.         IIC_SCL=0;
  73.         SDA_OUT();
  74.         IIC_SDA=1;
  75.         delay_us(2);
  76.         IIC_SCL=1;
  77.         delay_us(2);
  78.         IIC_SCL=0;
  79. }                                                                              
  80. //IIC发送一个字节
  81. //返回从机有无应答
  82. //1,有应答
  83. //0,无应答                          
  84. void IIC_Send_Byte(u8 txd)
  85. {                        
  86.         u8 t;   
  87.         SDA_OUT();             
  88.         IIC_SCL=0;//拉低时钟开始数据传输
  89.         for(t=0;t<8;t++)
  90.         {              
  91.                         //IIC_SDA=(txd&0x80)>>7;
  92.         if((txd&0x80)>>7)
  93.                 IIC_SDA=1;
  94.         else
  95.                 IIC_SDA=0;
  96.         txd<<=1;           
  97.         delay_us(2);   //对TEA5767这三个延时都是必须的
  98.         IIC_SCL=1;
  99.         delay_us(2);
  100.         IIC_SCL=0;       
  101.         delay_us(2);
  102.         }         
  103. }             
  104. //读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
  105. u16 IIC_Read_Byte(unsigned char ack)
  106. {
  107. u16 i,receive=0;
  108.         SDA_IN();//SDA设置为输入
  109.     for(i=0;i<16;i++ )
  110.         {
  111.         IIC_SCL=0;
  112.         delay_us(2);
  113.                 IIC_SCL=1;
  114.         receive<<=1;
  115.         if(READ_SDA)
  116.                 {
  117.                         receive++;
  118.                 }   
  119.                 delay_us(1);
  120.     }                                         
  121.     if (!ack)
  122.         IIC_NAck();//发送nACK
  123. ……………………

  124. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
实验23 IIC实验.rar (342.23 KB, 下载次数: 31)


回复

使用道具 举报

ID:625617 发表于 2019-10-17 14:45 | 显示全部楼层
这个资料很好,值得推荐复制
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表