STM32单片机如何更换单片机引脚

2019-07-20 20:11发布

只看到管脚配置,却找不到管脚定义(比如
  • #define SCL_H         GPIOB->BSRR = GPIO_Pin_6  


程序如下:

24C02子程序

/* Includes ------------------------------------------------------------------*/
#include "main.h"


/*******************************************************************************
* Function Name  : I2C_Configuration
* Description    : EEPROM1ü½ÅÅäÖÃ
* Input          : None
* Output         : None
* Return         : None
* Attention                 : None
*******************************************************************************/
void I2C_Configuration(void)
{
   I2C_InitTypeDef  I2C_InitStructure;
   GPIO_InitTypeDef  GPIO_InitStructure;

   RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO , ENABLE);

   /* Configure I2C1 pins: PB6->SCL and PB7->SDA */
   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
       
//ÕaàïÖ»óD¶Ë¿ú3õê¼»ˉÕò2»μ½¾ßì&#229B6oíPB7òy½ÅμĶ¨òå



       
   I2C_DeInit(I2C1);
   I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
   I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
   I2C_InitStructure.I2C_OwnAddress1 = 0x30;
   I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
   I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
   I2C_InitStructure.I2C_ClockSpeed = 100000;  /* 100KËù¶è */

   I2C_Cmd(I2C1, ENABLE);
   I2C_Init(I2C1, &I2C_InitStructure);
   /*ÔêDí1×Ö½ú1ó|′eÄ£ê½*/
   I2C_AcknowledgeConfig(I2C1, ENABLE);
}

/*******************************************************************************
* Function Name  : I2C_delay
* Description    : Ñó3ùê±¼ä
* Input          : None
* Output         : None
* Return         : None
* Attention                 : None
*******************************************************************************/
static void I2C_delay(uint16_t cnt)
{
        while(cnt--);
}

/*******************************************************************************
* Function Name  : I2C_AcknowledgePolling
* Description    : μè′y»ñè¡I2C×üÏß¿ØÖÆè¨ ÅD¶ÏÃ|×′ì¬
* Input          : - I2Cx:I2C¼Ä′æÆ÷»ùÖ·
*                  - I2C_Addr:′óÆ÷¼tμØÖ·
* Output         : None
* Return         : None
* Attention                 : None
*******************************************************************************/
static void I2C_AcknowledgePolling(I2C_TypeDef *I2Cx,uint8_t I2C_Addr)
{
  vu16 SR1_Tmp;
  do
  {   
    I2C_GenerateSTART(I2Cx, ENABLE); /*Æeê¼Î»*/
    /*¶áSR1*/
    SR1_Tmp = I2C_ReadRegister(I2Cx, I2C_Register_SR1);
    /*Æ÷¼tμØÖ·(D′)*/
#ifdef AT24C01A

        I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Transmitter);
#else

        I2C_Send7bitAddress(I2Cx, 0, I2C_Direction_Transmitter);
#endif

  }while(!(I2C_ReadRegister(I2Cx, I2C_Register_SR1) & 0x0002));

  I2C_ClearFlag(I2Cx, I2C_FLAG_AF);

  I2C_GenerateSTOP(I2Cx, ENABLE);  /*í£Ö1λ*/  
}


/*******************************************************************************
* Function Name  : I2C_Read
* Description    : í¨1yÖ¸¶¨I2C½ó¿ú¶á衶à¸ö×Ö½úêy¾Y
* Input          : - I2Cx:I2C¼Ä′æÆ÷»ùÖ·
*                  - I2C_Addr:′óÆ÷¼tμØÖ·
*                  - addr:Ô¤¶áè¡×Ö½ú′æ′¢λÖÃ
*                  - *buf:¶áè¡êy¾YμÄ′æ′¢λÖÃ
*                  - num:¶áè¡×Ö½úêy
* Output         : None
* Return         : 3é1|·μ»Ø0
* Attention                 : None
*******************************************************************************/
uint8_t I2C_Read(I2C_TypeDef *I2Cx,uint8_t I2C_Addr,uint8_t addr,uint8_t *buf,uint16_t num)
{
    if(num==0)
        return 1;
       
        while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY));
               
        /*ÔêDí1×Ö½ú1ó|′eÄ£ê½*/
        I2C_AcknowledgeConfig(I2Cx, ENABLE);


        /* ·¢ËíÆeê¼Î» */
    I2C_GenerateSTART(I2Cx, ENABLE);
    while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));/*EV5,Ö÷Ä£ê½*/

#ifdef AT24C01A       
    /*·¢ËíÆ÷¼tμØÖ·(D′)*/
    I2C_Send7bitAddress(I2Cx,  I2C_Addr, I2C_Direction_Transmitter);
    while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

        /*·¢ËíμØÖ·*/
        I2C_SendData(I2Cx, addr);
    while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));/*êy¾YòÑ·¢Ëí*/
               
        /*Æeê¼Î»*/
        I2C_GenerateSTART(I2Cx, ENABLE);
        while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));
       
        /*Æ÷¼t¶á*/
        I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Receiver);
        while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
               
#else       
        /*·¢ËíÆ÷¼tμØÖ·(¶á)24C01*/
        I2C_Send7bitAddress(I2Cx, addr<<1, I2C_Direction_Receiver);
        while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
#endif
       
    while (num)
    {
                if(num==1)
                {
                     I2C_AcknowledgeConfig(I2Cx, DISABLE);        /* ×&#238;oóò&#187;&#206;&#187;oóòa1&#216;±&#213;ó|′eμ&#196; */
                    I2C_GenerateSTOP(I2Cx, ENABLE);                        /* ·¢&#203;íí£&#214;1&#206;&#187; */
                }
            
                while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED));  /* EV7 */
            *buf = I2C_ReceiveData(I2Cx);
            buf++;
            /* Decrement the read bytes counter */
            num--;
    }
        /* &#212;ù′&#206;&#212;êDíó|′e&#196;£ê&#189; */
        I2C_AcknowledgeConfig(I2Cx, ENABLE);

        return 0;
}       

/*******************************************************************************
* Function Name  : I2C_WriteOneByte
* Description    : í¨1y&#214;&#184;&#182;¨I2C&#189;ó&#191;úD′è&#235;ò&#187;&#184;&#246;×&#214;&#189;úêy&#190;Y
* Input          : - I2Cx:I2C&#188;&#196;′&#230;&#198;÷&#187;ù&#214;·
*                  - I2C_Addr:′ó&#198;÷&#188;tμ&#216;&#214;·
*                  - addr:&#212;¤D′è&#235;×&#214;&#189;úμ&#216;&#214;·
*                  - value′è&#235;êy&#190;Y
* Output         : None
* Return         : 3é1|·μ&#187;&#216;0
* Attention                 : None
*******************************************************************************/
uint8_t I2C_WriteOneByte(I2C_TypeDef *I2Cx,uint8_t I2C_Addr,uint8_t addr,uint8_t value)
{
    /* &#198;eê&#188;&#206;&#187; */
          I2C_GenerateSTART(I2Cx, ENABLE);
          while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));  

#ifdef AT24C01A
          /* ·¢&#203;í&#198;÷&#188;tμ&#216;&#214;·(D′)*/
          I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Transmitter);
          while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

          /*·¢&#203;íμ&#216;&#214;·*/
          I2C_SendData(I2Cx, addr);
        while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#else       
        I2C_Send7bitAddress(I2Cx, addr<<1, I2C_Direction_Transmitter);
        while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
#endif

        /* D′ò&#187;&#184;&#246;×&#214;&#189;ú*/
          I2C_SendData(I2Cx, value);
          while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
       
          /* í£&#214;1&#206;&#187;*/
          I2C_GenerateSTOP(I2Cx, ENABLE);

          I2C_AcknowledgePolling(I2Cx,I2C_Addr);

        I2C_delay(1000);

        return 0;
}


/*******************************************************************************
* Function Name  : I2C_Write
* Description    : í¨1y&#214;&#184;&#182;¨I2C&#189;ó&#191;úD′è&#235;&#182;à&#184;&#246;×&#214;&#189;úêy&#190;Y
* Input          : - I2Cx:I2C&#188;&#196;′&#230;&#198;÷&#187;ù&#214;·
*                  - I2C_Addr:′ó&#198;÷&#188;tμ&#216;&#214;·
*                  - addr:&#212;¤D′è&#235;×&#214;&#189;úμ&#216;&#214;·
*                  - *buf:&#212;¤D′è&#235;êy&#190;Y′&#230;′¢&#206;&#187;&#214;&#195;
*                  - num′è&#235;×&#214;&#189;úêy
* Output         : None
* Return         : 3é1|·μ&#187;&#216;0
* Attention                 : None
*******************************************************************************/
uint8_t I2C_Write(I2C_TypeDef *I2Cx,uint8_t I2C_Addr,uint8_t addr,uint8_t *buf,uint16_t num)
{
        uint8_t err=0;
       
        while(num--)
        {
                if(I2C_WriteOneByte(I2Cx, I2C_Addr,addr++,*buf++))
                {
                        err++;
                }
        }
        if(err)
                return 1;
        else
                return 0;       
}

/*********************************************************************************************************
      END FILE
*********************************************************************************************************/




24c02.h文件如下:

/*
**------------------------------------------------------------------------------------------------------
** Modified by:                       
** Modified date:       
** Version:
** Descriptions:               
********************************************************************************************************/
#ifndef __24C02_H
#define __24C02_H

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
                                          
/* Private define ------------------------------------------------------------*/
#define AT24C01A                /* 24C01A,I2Cê±Dòoííùoóμ&#196;24C02ò&#187;&#209;ù */
//#define AT24C01                /* 24C01,I2Cμ&#196;ê±Dòoí&#198;&#213;í¨μ&#196;óDμ&#227;2&#187;í&#172; */

#define ADDR_24LC02                0xA0
#define I2C_PAGESIZE        4                /* 24C01/01Aò3&#187;o3&#229;ê&#199;4&#184;&#246; */

/* Private function prototypes -----------------------------------------------*/
void I2C_Configuration(void);
uint8_t I2C_Read(I2C_TypeDef *I2Cx,uint8_t I2C_Addr,uint8_t addr,uint8_t *buf,uint16_t num);
uint8_t I2C_Write(I2C_TypeDef *I2Cx,uint8_t I2C_Addr,uint8_t addr,uint8_t *buf,uint16_t num);

#endif

/*********************************************************************************************************
      END FILE
*********************************************************************************************************/


main.c程序如下:
/***********************************************************************
&#206;&#196;&#188;t&#195;&#251;3&#198;£omain.C
1|    &#196;ü£o
±àD′ê±&#188;&#228;£o
±à D′ è&#203;£o
×¢    òa£o
***********************************************************************/
#include "main.h"

int main(void)
{
       
        /* Setup STM32 system (clocks, GPIO, NVIC) */
        System_Setup();
    //NVIC_Configuration();
    USART_Configuration();
        I2C_Configuration();
        I2C_Test(); //×¢òa&#184;&#195;&#182;&#206;2aê&#212;3ìDò2&#187;òa·&#197;μ&#189;&#209;-&#187;·&#214;D£&#172;EEPROM2áD′μ&#196;′&#206;êyê&#199;óD&#207;Tμ&#196;£&#161;£&#161;£&#161;      
        while (1)
        {
                ;
        }
}
/***********************************************************************
oˉêy&#195;&#251;3&#198;£oI2C_Test(void)
1|    &#196;ü£o2aê&#212;EEPROM
ê&#228;è&#235;2&#206;êy£o
ê&#228;3&#246;2&#206;êy£o
±àD′ê±&#188;&#228;£o2012.11.22
±à D′ è&#203;£o
×¢    òa£o&#207;è&#207;òEEPROMD′&#214;&#184;&#182;¨êy&#190;Y£&#172;è&#187;oó&#212;ù&#182;á3&#246;à′£&#172;×&#238;oóí¨1yRS232·¢&#203;íμ&#189;μ&#231;&#196;&#212;é&#207;£&#172;
                  ò&#212;&#209;é&#214;¤&#182;áD′ê&#199;·&#241;&#213;yè·
***********************************************************************/
void I2C_Test(void)
{
        unsigned int i = 0;
        unsigned char WriteBuffer[256];
        unsigned char ReadBuffer[256];
        for(i = 0;i < 256;i ++)//3&#245;ê&#188;&#187;ˉ′yD′êy&#190;Y&#199;&#248;
        {
                WriteBuffer = i;
        }
        I2C_Write(I2C1,ADDR_24LC02,0,WriteBuffer,sizeof(WriteBuffer));        //&#207;òEEPROMD′êy&#190;Y
        I2C_Read(I2C1,ADDR_24LC02,0,ReadBuffer,sizeof(WriteBuffer));        //&#207;òEEPROM&#182;áêy&#190;Y
        RS232_Send_Data(ReadBuffer,1);                                                                //í¨RS232&#189;&#171;&#182;áμ&#189;μ&#196;êy&#190;Y·¢3&#246;襠      
}
#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d ", file, line) */

  /* Infinite loop */
  while (1)
  {}
}
#endif


/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/



/***********************************************************************
&#206;&#196;&#188;t&#195;&#251;3&#198;£mmain.h
1|    &#196;ü£o
±àD′ê±&#188;&#228;£o
±à D′ è&#203;£o
×¢    òa£o
***********************************************************************/
#ifndef __MAIN_H
#define __MAIN_H

#include "stm32f10x.h"
#include "stm32f107.h"
#include "SCI.H"
#include "24C02.h"

void Time_Update(void);
void Delay(uint32_t nCount);
void I2C_Test(void);

#endif





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。