这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 漓东e学堂 » 27作业

共21条 2/3 1 2 3 跳转至
高工
2014-12-08 22:05:05     打赏
11楼
还差不少啊

菜鸟
2014-12-14 13:23:31     打赏
12楼
#include "stm32f10x.h"     
#include "stm32_eval.h"     
#include      
#define VREF 3.3     
unsigned char i=0;     
   
EXTI_InitTypeDef   EXTI_InitStructure;       
NVIC_InitTypeDef   NVIC_InitStructure;     
GPIO_InitTypeDef   GPIO_InitStructure;     
USART_InitTypeDef USART_InitStructure;     
USART_ClockInitTypeDef USART_ClockInitStructure;     
   
   
void delay_us(u32 n)   
{   
    u8 j;   
    while(n--)   
    for(j=0;j<10;j++);   
}   
   
void  delay_ms(u32 n)   
{   
    while(n--)   
    delay_us(1000);   
}   
   
      
     
void RCC_Configuration(void)     
{     
  RCC_DeInit();     
         
  RCC_HSICmd(ENABLE);     
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);     
       
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);     
       
  RCC_HSEConfig(RCC_HSE_OFF);     
  RCC_LSEConfig(RCC_LSE_OFF);     
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz     
  RCC_PLLCmd(ENABLE);     
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);     
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);     
  RCC_PCLK2Config(RCC_HCLK_Div1);     
  RCC_PCLK1Config(RCC_HCLK_Div2);     
  RCC_HCLKConfig(RCC_SYSCLK_Div1);     
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);     
  while(RCC_GetSYSCLKSource() != 0x08);     
     
         
    //SystemInit();     
         
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);     
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);    
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);     
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;     
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
  GPIO_Init(GPIOD, &GPIO_InitStructure);     
    GPIO_ResetBits(GPIOD,GPIO_Pin_2);     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);     
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;     
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
  GPIO_Init(GPIOC, &GPIO_InitStructure);     
    GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);     
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);     
}      
     
void USART_int(long BaudRate)     
{     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);     
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;     
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      
    GPIO_Init(GPIOA, &GPIO_InitStructure);     
    /* PA10 USART1_Rx  */     
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     
    GPIO_Init(GPIOA, &GPIO_InitStructure);     
  /* USARTx configured as follow:   
        - BaudRate = 115200 baud     
        - Word Length = 8 Bits   
        - One Stop Bit   
        - No parity   
        - Hardware flow control disabled (RTS and CTS signals)   
        - Receive and transmit enabled   
  */     
  USART_InitStructure.USART_BaudRate = BaudRate;   
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;     
  USART_InitStructure.USART_StopBits = USART_StopBits_1;     
  USART_InitStructure.USART_Parity = USART_Parity_No;     
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;e     
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    
    USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;          
    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;           
    USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;           
    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;     
    USART_ClockInit(USART1, &USART_ClockInitStructure);     
  USART_Init(USART1, &USART_InitStructure);     
  USART_Cmd(USART1, ENABLE);     
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);     
 USART_Cmd(USART1, ENABLE);     
}     
void GPIO_INIT()       
{       
      
  RCC_Configuration();       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;       
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;       
GPIO_Init(GPIOC, &GPIO_InitStructure);       
      
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;       
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
  GPIO_Init(GPIOB, &GPIO_InitStructure);       
}       
     
void Iic1_Init(void)     
{     
        GPIO_InitTypeDef GPIO_InitStructure;     
        I2C_InitTypeDef I2C_InitStructure;     
             
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);     
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);     
        //PB6-I2C2_SCL PB7-I2C2_SDA PB10-I2C2_SCL PB11-I2C2_SDA     
        /* Configure IO connected to IIC*********************/     
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10 | GPIO_Pin_11;     
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;     
        GPIO_Init(GPIOB, &GPIO_InitStructure);     
             
        I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;     
        I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;     
        I2C_InitStructure.I2C_OwnAddress1 = 0xA0;     
        I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;     
        I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;     
        I2C_InitStructure.I2C_ClockSpeed = 400000;            
        I2C_Cmd(I2C2, ENABLE);        
        I2C_Init(I2C2, &I2C_InitStructure);     
        I2C_AcknowledgeConfig(I2C2, ENABLE);         
}     
     
     
/**********************************************************************/     
/*IIC?????                                                                               */     
/*                                                                                                                                          */     
/**********************************************************************/     
void I2C2_WriteByte(unsigned char id,unsigned char write_address,unsigned char byte)     
{     
        while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));     
        I2C_GenerateSTART(I2C2,ENABLE);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));   
        I2C_Send7bitAddress(I2C2,id,I2C_Direction_Transmitter);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));     
        I2C_SendData(I2C2, write_address);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));     
        I2C_SendData(I2C2, byte);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));     
        I2C_GenerateSTOP(I2C2, ENABLE);     
     
        do     
        {                     
                /* Send START condition */     
                I2C_GenerateSTART(I2C2, ENABLE);     
                /* Read I2C2 SR1 register */     
                /* Send EEPROM address for write */     
                I2C_Send7bitAddress(I2C2, 0xA0, I2C_Direction_Transmitter);     
        }while(!(I2C_ReadRegister(I2C2, I2C_Register_SR1) & 0x0002));    
     
        /* Clear AF flag */     
        I2C_ClearFlag(I2C2, I2C_FLAG_AF);     
        /* STOP condition */         
        I2C_GenerateSTOP(I2C2, ENABLE);       
}     
     
     
unsigned char I2C2_ReadByte(unsigned char  id, unsigned char read_address)     
{       
        unsigned char temp;              
     
        while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY)){}     
          I2C_GenerateSTART(I2C2, ENABLE);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));     
          I2C_Send7bitAddress(I2C2, id, I2C_Direction_Transmitter);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));     
          I2C_Cmd(I2C2, ENABLE);     
          I2C_SendData(I2C2, read_address);       
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));     
          I2C_GenerateSTART(I2C2, ENABLE);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));     
          I2C_Send7bitAddress(I2C2, id, I2C_Direction_Receiver);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));     
    I2C_AcknowledgeConfig(I2C2, DISABLE);     
    I2C_GenerateSTOP(I2C2, ENABLE);     
    while(!(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED)));     
                   
    temp = I2C_ReceiveData(I2C2);     
        
          I2C_AcknowledgeConfig(I2C2, ENABLE);     
     
        return temp;     
}     
     
   
     
     
void EXTIkeyS1_Config(void)      
{       
  /* Enable GPIOA clock */       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);       
  /* Configure PA.00 pin as input floating */       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;       
  GPIO_Init(GPIOC, &GPIO_InitStructure);       
  /* Enable AFIO clock */       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);       
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);       
  EXTI_InitStructure.EXTI_Line = EXTI_Line8;       
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;         
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;       
  EXTI_Init(&EXTI_InitStructure);       
  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;       
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;       
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;       
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
  NVIC_Init(&NVIC_InitStructure);       
}       
void EXTI9_5_IRQHandler(void)     
{     
  if(EXTI_GetITStatus(EXTI_Line8) != RESET)     
  {     
        i=0;     
        I2C2_WriteByte(0xA0,0,0);     
       printf("上电清0\r\n",i);     
    /* Clear the  EXTI line 8 pending bit */     
    EXTI_ClearITPendingBit(EXTI_Line8);     
  }     
}     
     
 void IIC_TEST()     
{     
   printf(" config done...\r\n");       
    i = I2C2_ReadByte(0xA0,0);     
    i++;         
    printf("从地址读出数据:%d\r\n",i);       
    I2C2_WriteByte(0xA0,0,i);       
      printf("向地址输入数据:%d\r\n",i);       
    printf("上电次数%d\r\n",i);     
           
       
}      
   
int main(void)       
{       
     /*!< At this stage the microcontroller clock setting is already configured,    
       this is done through SystemInit() function which is called from startup   
       file (startup_stm32f10x_xx.s) before to branch to application main.   
       To reconfigure the default setting of SystemInit() function, refer to   
       system_stm32f10x.c file   
     */          
            
  /* System Clocks Configuration */     
  RCC_Configuration();       
  EXTIkeyS1_Config();     
  GPIO_INIT();       
  USART_int(115200);       
  Iic1_Init();     
  IIC_TEST();     
   
         
}       
     
     
#ifdef  USE_FULL_ASSERT       
       
void assert_failed(uint8_t* file, uint32_t line)       
{        
  while (1)       
  {       
  }       
}       
       
#endif       
       
#ifdef __GNUC__       
       
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)       
#else       
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)       
#endif /* __GNUC__ */       
         
       
PUTCHAR_PROTOTYPE       
{       
       
  USART_SendData(EVAL_COM1, (uint8_t) ch);       
  while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)       
  {}       
       
  return ch;       
}      

 


菜鸟
2014-12-14 13:23:33     打赏
13楼
#include "stm32f10x.h"     
#include "stm32_eval.h"     
#include      
#define VREF 3.3     
unsigned char i=0;     
   
EXTI_InitTypeDef   EXTI_InitStructure;       
NVIC_InitTypeDef   NVIC_InitStructure;     
GPIO_InitTypeDef   GPIO_InitStructure;     
USART_InitTypeDef USART_InitStructure;     
USART_ClockInitTypeDef USART_ClockInitStructure;     
   
   
void delay_us(u32 n)   
{   
    u8 j;   
    while(n--)   
    for(j=0;j<10;j++);   
}   
   
void  delay_ms(u32 n)   
{   
    while(n--)   
    delay_us(1000);   
}   
   
      
     
void RCC_Configuration(void)     
{     
  RCC_DeInit();     
         
  RCC_HSICmd(ENABLE);     
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);     
       
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);     
       
  RCC_HSEConfig(RCC_HSE_OFF);     
  RCC_LSEConfig(RCC_LSE_OFF);     
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz     
  RCC_PLLCmd(ENABLE);     
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);     
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);     
  RCC_PCLK2Config(RCC_HCLK_Div1);     
  RCC_PCLK1Config(RCC_HCLK_Div2);     
  RCC_HCLKConfig(RCC_SYSCLK_Div1);     
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);     
  while(RCC_GetSYSCLKSource() != 0x08);     
     
         
    //SystemInit();     
         
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);     
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);    
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);     
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;     
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
  GPIO_Init(GPIOD, &GPIO_InitStructure);     
    GPIO_ResetBits(GPIOD,GPIO_Pin_2);     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);     
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;     
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
  GPIO_Init(GPIOC, &GPIO_InitStructure);     
    GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);     
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);     
}      
     
void USART_int(long BaudRate)     
{     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);     
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;     
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      
    GPIO_Init(GPIOA, &GPIO_InitStructure);     
    /* PA10 USART1_Rx  */     
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     
    GPIO_Init(GPIOA, &GPIO_InitStructure);     
  /* USARTx configured as follow:   
        - BaudRate = 115200 baud     
        - Word Length = 8 Bits   
        - One Stop Bit   
        - No parity   
        - Hardware flow control disabled (RTS and CTS signals)   
        - Receive and transmit enabled   
  */     
  USART_InitStructure.USART_BaudRate = BaudRate;   
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;     
  USART_InitStructure.USART_StopBits = USART_StopBits_1;     
  USART_InitStructure.USART_Parity = USART_Parity_No;     
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;e     
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    
    USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;          
    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;           
    USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;           
    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;     
    USART_ClockInit(USART1, &USART_ClockInitStructure);     
  USART_Init(USART1, &USART_InitStructure);     
  USART_Cmd(USART1, ENABLE);     
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);     
 USART_Cmd(USART1, ENABLE);     
}     
void GPIO_INIT()       
{       
      
  RCC_Configuration();       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;       
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;       
GPIO_Init(GPIOC, &GPIO_InitStructure);       
      
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;       
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
  GPIO_Init(GPIOB, &GPIO_InitStructure);       
}       
     
void Iic1_Init(void)     
{     
        GPIO_InitTypeDef GPIO_InitStructure;     
        I2C_InitTypeDef I2C_InitStructure;     
             
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);     
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);     
        //PB6-I2C2_SCL PB7-I2C2_SDA PB10-I2C2_SCL PB11-I2C2_SDA     
        /* Configure IO connected to IIC*********************/     
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10 | GPIO_Pin_11;     
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;     
        GPIO_Init(GPIOB, &GPIO_InitStructure);     
             
        I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;     
        I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;     
        I2C_InitStructure.I2C_OwnAddress1 = 0xA0;     
        I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;     
        I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;     
        I2C_InitStructure.I2C_ClockSpeed = 400000;            
        I2C_Cmd(I2C2, ENABLE);        
        I2C_Init(I2C2, &I2C_InitStructure);     
        I2C_AcknowledgeConfig(I2C2, ENABLE);         
}     
     
     
/**********************************************************************/     
/*IIC?????                                                                               */     
/*                                                                                                                                          */     
/**********************************************************************/     
void I2C2_WriteByte(unsigned char id,unsigned char write_address,unsigned char byte)     
{     
        while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));     
        I2C_GenerateSTART(I2C2,ENABLE);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));   
        I2C_Send7bitAddress(I2C2,id,I2C_Direction_Transmitter);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));     
        I2C_SendData(I2C2, write_address);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));     
        I2C_SendData(I2C2, byte);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));     
        I2C_GenerateSTOP(I2C2, ENABLE);     
     
        do     
        {                     
                /* Send START condition */     
                I2C_GenerateSTART(I2C2, ENABLE);     
                /* Read I2C2 SR1 register */     
                /* Send EEPROM address for write */     
                I2C_Send7bitAddress(I2C2, 0xA0, I2C_Direction_Transmitter);     
        }while(!(I2C_ReadRegister(I2C2, I2C_Register_SR1) & 0x0002));    
     
        /* Clear AF flag */     
        I2C_ClearFlag(I2C2, I2C_FLAG_AF);     
        /* STOP condition */         
        I2C_GenerateSTOP(I2C2, ENABLE);       
}     
     
     
unsigned char I2C2_ReadByte(unsigned char  id, unsigned char read_address)     
{       
        unsigned char temp;              
     
        while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY)){}     
          I2C_GenerateSTART(I2C2, ENABLE);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));     
          I2C_Send7bitAddress(I2C2, id, I2C_Direction_Transmitter);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));     
          I2C_Cmd(I2C2, ENABLE);     
          I2C_SendData(I2C2, read_address);       
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));     
          I2C_GenerateSTART(I2C2, ENABLE);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));     
          I2C_Send7bitAddress(I2C2, id, I2C_Direction_Receiver);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));     
    I2C_AcknowledgeConfig(I2C2, DISABLE);     
    I2C_GenerateSTOP(I2C2, ENABLE);     
    while(!(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED)));     
                   
    temp = I2C_ReceiveData(I2C2);     
        
          I2C_AcknowledgeConfig(I2C2, ENABLE);     
     
        return temp;     
}     
     
   
     
     
void EXTIkeyS1_Config(void)      
{       
  /* Enable GPIOA clock */       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);       
  /* Configure PA.00 pin as input floating */       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;       
  GPIO_Init(GPIOC, &GPIO_InitStructure);       
  /* Enable AFIO clock */       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);       
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);       
  EXTI_InitStructure.EXTI_Line = EXTI_Line8;       
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;         
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;       
  EXTI_Init(&EXTI_InitStructure);       
  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;       
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;       
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;       
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
  NVIC_Init(&NVIC_InitStructure);       
}       
void EXTI9_5_IRQHandler(void)     
{     
  if(EXTI_GetITStatus(EXTI_Line8) != RESET)     
  {     
        i=0;     
        I2C2_WriteByte(0xA0,0,0);     
       printf("上电清0\r\n",i);     
    /* Clear the  EXTI line 8 pending bit */     
    EXTI_ClearITPendingBit(EXTI_Line8);     
  }     
}     
     
 void IIC_TEST()     
{     
   printf(" config done...\r\n");       
    i = I2C2_ReadByte(0xA0,0);     
    i++;         
    printf("从地址读出数据:%d\r\n",i);       
    I2C2_WriteByte(0xA0,0,i);       
      printf("向地址输入数据:%d\r\n",i);       
    printf("上电次数%d\r\n",i);     
           
       
}      
   
int main(void)       
{       
     /*!< At this stage the microcontroller clock setting is already configured,    
       this is done through SystemInit() function which is called from startup   
       file (startup_stm32f10x_xx.s) before to branch to application main.   
       To reconfigure the default setting of SystemInit() function, refer to   
       system_stm32f10x.c file   
     */          
            
  /* System Clocks Configuration */     
  RCC_Configuration();       
  EXTIkeyS1_Config();     
  GPIO_INIT();       
  USART_int(115200);       
  Iic1_Init();     
  IIC_TEST();     
   
         
}       
     
     
#ifdef  USE_FULL_ASSERT       
       
void assert_failed(uint8_t* file, uint32_t line)       
{        
  while (1)       
  {       
  }       
}       
       
#endif       
       
#ifdef __GNUC__       
       
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)       
#else       
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)       
#endif /* __GNUC__ */       
         
       
PUTCHAR_PROTOTYPE       
{       
       
  USART_SendData(EVAL_COM1, (uint8_t) ch);       
  while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)       
  {}       
       
  return ch;       
}      

 


菜鸟
2014-12-14 13:25:20     打赏
14楼
#include "stm32f10x.h"     
#include "stm32_eval.h"     
#include      
#define VREF 3.3     
unsigned char i=0;     
   
EXTI_InitTypeDef   EXTI_InitStructure;       
NVIC_InitTypeDef   NVIC_InitStructure;     
GPIO_InitTypeDef   GPIO_InitStructure;     
USART_InitTypeDef USART_InitStructure;     
USART_ClockInitTypeDef USART_ClockInitStructure;     
   
   
void delay_us(u32 n)   
{   
    u8 j;   
    while(n--)   
    for(j=0;j<10;j++);   
}   
   
void  delay_ms(u32 n)   
{   
    while(n--)   
    delay_us(1000);   
}   
   
      
     
void RCC_Configuration(void)     
{     
  RCC_DeInit();     
         
  RCC_HSICmd(ENABLE);     
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);     
       
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);     
       
  RCC_HSEConfig(RCC_HSE_OFF);     
  RCC_LSEConfig(RCC_LSE_OFF);     
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz     
  RCC_PLLCmd(ENABLE);     
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);     
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);     
  RCC_PCLK2Config(RCC_HCLK_Div1);     
  RCC_PCLK1Config(RCC_HCLK_Div2);     
  RCC_HCLKConfig(RCC_SYSCLK_Div1);     
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);     
  while(RCC_GetSYSCLKSource() != 0x08);     
     
         
    //SystemInit();     
         
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);     
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);    
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);     
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;     
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
  GPIO_Init(GPIOD, &GPIO_InitStructure);     
    GPIO_ResetBits(GPIOD,GPIO_Pin_2);     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);     
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;     
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
  GPIO_Init(GPIOC, &GPIO_InitStructure);     
    GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);     
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);     
}      
     
void USART_int(long BaudRate)     
{     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);     
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;     
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      
    GPIO_Init(GPIOA, &GPIO_InitStructure);     
    /* PA10 USART1_Rx  */     
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     
    GPIO_Init(GPIOA, &GPIO_InitStructure);     
  /* USARTx configured as follow:   
        - BaudRate = 115200 baud     
        - Word Length = 8 Bits   
        - One Stop Bit   
        - No parity   
        - Hardware flow control disabled (RTS and CTS signals)   
        - Receive and transmit enabled   
  */     
  USART_InitStructure.USART_BaudRate = BaudRate;   
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;     
  USART_InitStructure.USART_StopBits = USART_StopBits_1;     
  USART_InitStructure.USART_Parity = USART_Parity_No;     
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;e     
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    
    USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;          
    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;           
    USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;           
    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;     
    USART_ClockInit(USART1, &USART_ClockInitStructure);     
  USART_Init(USART1, &USART_InitStructure);     
  USART_Cmd(USART1, ENABLE);     
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);     
 USART_Cmd(USART1, ENABLE);     
}     
void GPIO_INIT()       
{       
      
  RCC_Configuration();       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;       
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;       
GPIO_Init(GPIOC, &GPIO_InitStructure);       
      
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;       
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
  GPIO_Init(GPIOB, &GPIO_InitStructure);       
}       
     
void Iic1_Init(void)     
{     
        GPIO_InitTypeDef GPIO_InitStructure;     
        I2C_InitTypeDef I2C_InitStructure;     
             
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);     
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);     
        //PB6-I2C2_SCL PB7-I2C2_SDA PB10-I2C2_SCL PB11-I2C2_SDA     
        /* Configure IO connected to IIC*********************/     
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10 | GPIO_Pin_11;     
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;     
        GPIO_Init(GPIOB, &GPIO_InitStructure);     
             
        I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;     
        I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;     
        I2C_InitStructure.I2C_OwnAddress1 = 0xA0;     
        I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;     
        I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;     
        I2C_InitStructure.I2C_ClockSpeed = 400000;            
        I2C_Cmd(I2C2, ENABLE);        
        I2C_Init(I2C2, &I2C_InitStructure);     
        I2C_AcknowledgeConfig(I2C2, ENABLE);         
}     
     
     
/**********************************************************************/     
/*IIC?????                                                                               */     
/*                                                                                                                                          */     
/**********************************************************************/     
void I2C2_WriteByte(unsigned char id,unsigned char write_address,unsigned char byte)     
{     
        while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));     
        I2C_GenerateSTART(I2C2,ENABLE);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));   
        I2C_Send7bitAddress(I2C2,id,I2C_Direction_Transmitter);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));     
        I2C_SendData(I2C2, write_address);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));     
        I2C_SendData(I2C2, byte);     
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));     
        I2C_GenerateSTOP(I2C2, ENABLE);     
     
        do     
        {                     
                /* Send START condition */     
                I2C_GenerateSTART(I2C2, ENABLE);     
                /* Read I2C2 SR1 register */     
                /* Send EEPROM address for write */     
                I2C_Send7bitAddress(I2C2, 0xA0, I2C_Direction_Transmitter);     
        }while(!(I2C_ReadRegister(I2C2, I2C_Register_SR1) & 0x0002));    
     
        /* Clear AF flag */     
        I2C_ClearFlag(I2C2, I2C_FLAG_AF);     
        /* STOP condition */         
        I2C_GenerateSTOP(I2C2, ENABLE);       
}     
     
     
unsigned char I2C2_ReadByte(unsigned char  id, unsigned char read_address)     
{       
        unsigned char temp;              
     
        while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY)){}     
          I2C_GenerateSTART(I2C2, ENABLE);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));     
          I2C_Send7bitAddress(I2C2, id, I2C_Direction_Transmitter);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));     
          I2C_Cmd(I2C2, ENABLE);     
          I2C_SendData(I2C2, read_address);       
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));     
          I2C_GenerateSTART(I2C2, ENABLE);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));     
          I2C_Send7bitAddress(I2C2, id, I2C_Direction_Receiver);     
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));     
    I2C_AcknowledgeConfig(I2C2, DISABLE);     
    I2C_GenerateSTOP(I2C2, ENABLE);     
    while(!(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED)));     
                   
    temp = I2C_ReceiveData(I2C2);     
        
          I2C_AcknowledgeConfig(I2C2, ENABLE);     
     
        return temp;     
}     
     
   
     
     
void EXTIkeyS1_Config(void)      
{       
  /* Enable GPIOA clock */       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);       
  /* Configure PA.00 pin as input floating */       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;       
  GPIO_Init(GPIOC, &GPIO_InitStructure);       
  /* Enable AFIO clock */       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);       
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);       
  EXTI_InitStructure.EXTI_Line = EXTI_Line8;       
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;         
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;       
  EXTI_Init(&EXTI_InitStructure);       
  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;       
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;       
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;       
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
  NVIC_Init(&NVIC_InitStructure);       
}       
void EXTI9_5_IRQHandler(void)     
{     
  if(EXTI_GetITStatus(EXTI_Line8) != RESET)     
  {     
        i=0;     
        I2C2_WriteByte(0xA0,0,0);     
       printf("上电清0\r\n",i);     
    /* Clear the  EXTI line 8 pending bit */     
    EXTI_ClearITPendingBit(EXTI_Line8);     
  }     
}     
     
 void IIC_TEST()     
{     
   printf(" config done...\r\n");       
    i = I2C2_ReadByte(0xA0,0);     
    i++;         
    printf("从地址读出数据:%d\r\n",i);       
    I2C2_WriteByte(0xA0,0,i);       
      printf("向地址输入数据:%d\r\n",i);       
    printf("上电次数%d\r\n",i);     
           
       
}      
   
int main(void)       
{       
     /*!< At this stage the microcontroller clock setting is already configured,    
       this is done through SystemInit() function which is called from startup   
       file (startup_stm32f10x_xx.s) before to branch to application main.   
       To reconfigure the default setting of SystemInit() function, refer to   
       system_stm32f10x.c file   
     */          
            
  /* System Clocks Configuration */     
  RCC_Configuration();       
  EXTIkeyS1_Config();     
  GPIO_INIT();       
  USART_int(115200);       
  Iic1_Init();     
  IIC_TEST();     
   
         
}       
     
     
#ifdef  USE_FULL_ASSERT       
       
void assert_failed(uint8_t* file, uint32_t line)       
{        
  while (1)       
  {       
  }       
}       
       
#endif       
       
#ifdef __GNUC__       
       
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)       
#else       
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)       
#endif /* __GNUC__ */       
         
       
PUTCHAR_PROTOTYPE       
{       
       
  USART_SendData(EVAL_COM1, (uint8_t) ch);       
  while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)       
  {}       
       
  return ch;       
}      

 


高工
2014-12-16 15:26:01     打赏
15楼
能说明一下么,都不知道是些什么。

菜鸟
2014-12-25 13:02:10     打赏
16楼
view plaincopy to clipboardprint?

    /** 
      ****************************************************************************** 
      * @file    EXTI/EXTI_Config/main.c  
      * @author  MCD Application Team 
      * @version V3.5.0 
      * @date    08-April-2011 
      * @brief   Main program body 
      ****************************************************************************** 
      * @attention 
      * 
      * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 
      * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 
      * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 
      * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 
      * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 
      * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 
      * 
      * 
     
        © COPYRIGHT 2011 STMicroelectronics 
     
    ****************************************************************************** 
      */   
      
    /* Includes ------------------------------------------------------------------*/  
    #include "stm32f10x.h"  
    #include "stm32_eval.h"  
    #include "delay.h"  
    #include   
    volatile int flag;  
    #define Set_B20()    GPIO_SetBits(GPIOC, GPIO_Pin_12)      //上拉关闭PC12  
    #define Reset_B20()  GPIO_ResetBits(GPIOC, GPIO_Pin_12)  //下拉打开PC12  
    #define Read_B20()   GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)  //读PC12状态  
    unsigned char Error_Flag=0;  
    unsigned char zf=0;  
    void SysTick_Configuration(void)  
    {  
      /* Setup SysTick Timer for 10 msec interrupts  */  
      if (SysTick_Config(48000))                //SysTick配置  
      {   
        /* Capture error */   
        while (1);  
      }    
     /* Configure the SysTick handler priority */  
      NVIC_SetPriority(SysTick_IRQn, 0x0);                       //SysTick中断优先级  
    }  
      
      
    /** @addtogroup STM32F10x_StdPeriph_Examples 
      * @{ 
      */  
      
    /** @addtogroup EXTI_Config 
      * @{ 
      */   
      
    /* Private typedef -----------------------------------------------------------*/  
    /* Private define ------------------------------------------------------------*/  
    /* Private macro -------------------------------------------------------------*/  
    /* Private variables ---------------------------------------------------------*/  
    GPIO_InitTypeDef   GPIO_InitStructure;  
    USART_InitTypeDef USART_InitStructure;  
    USART_ClockInitTypeDef USART_ClockInitStructure;  
      
    void RCC_Configuration(void)  
    {  
      RCC_DeInit();                 //将外设RCC重新设为缺省值    
          
      RCC_HSICmd(ENABLE);            //使能内部高速晶振    
      while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);      //当SHI晶振就绪则重新设定   
        
      RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);      //设置系统时钟,选择SHI时钟为系统时钟  
        
      RCC_HSEConfig(RCC_HSE_OFF);     //设置外部高速晶振,HSE晶振OFF   
      RCC_LSEConfig(RCC_LSE_OFF);      //设置外部低速晶振,LSE晶振OFF    
          
        //******配置PLL时钟频率为48MHZ*******//  
          
      RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_8);    //RCC_PLLMul_x 即设置PLL时钟频率为 6*x MHz  
          
      //************************************//    
          
      RCC_PLLCmd(ENABLE);             ////*******************使能PLL   
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);        //PLL就绪    
      RCC_ADCCLKConfig(RCC_PCLK2_Div4);                     //  ADC时钟=PCLK/2    
      RCC_PCLK2Config(RCC_HCLK_Div1);                       //  APB2时钟=HCLK   
      RCC_PCLK1Config(RCC_HCLK_Div2);            /// APB1时钟=HCLK/2    
      RCC_HCLKConfig(RCC_SYSCLK_Div1);         //  AHB时钟=系统时钟   
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);       // 选择PLL为系统时钟    
      while(RCC_GetSYSCLKSource() != 0x08);        //当PLL不是系统时钟   
      
          
    //  SystemInit();  
          
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); //使能APB2外设时钟/****GPIOD时钟和功能复用IO时钟***/    
     GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG    SW_DP使能    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);  
     GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;         // //选择设置GPIO管脚   
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  ////设置管脚速率    
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     ////设置管脚工作状态,此为推挽输出    
      GPIO_Init(GPIOD, &GPIO_InitStructure);    //初始化GPIOD   
        GPIO_ResetBits(GPIOD,GPIO_Pin_2);     //上拉关闭蜂鸣器    
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);  
     GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//LED  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
      GPIO_Init(GPIOC, &GPIO_InitStructure);  
        GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);  
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟  
    }   
      
    void USART_int(long BaudRate)  
    {  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//使能GPIOA、USART1外设时钟  
           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   
        GPIO_Init(GPIOA, &GPIO_InitStructure);  
        /* PA10 USART1_Rx  */  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
        GPIO_Init(GPIOA, &GPIO_InitStructure);  
      /* USARTx configured as follow: 
            - BaudRate = 115200 baud   
            - Word Length = 8 Bits 
            - One Stop Bit 
            - No parity 
            - Hardware flow control disabled (RTS and CTS signals) 
            - Receive and transmit enabled 
      */  
      USART_InitStructure.USART_BaudRate = BaudRate;//设置USART传输波特率  BaudRate = 9600 可以直接写9600  
      USART_InitStructure.USART_WordLength = USART_WordLength_8b;//一帧传输或者接收的数据位数为8bit  
      USART_InitStructure.USART_StopBits = USART_StopBits_1;//在帧结尾传输一个停止位  
      USART_InitStructure.USART_Parity = USART_Parity_No;//奇偶模式失能  
      USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制失能  
      USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能接收发模式  
        USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;    //时钟低电平活动  
        USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;      //引脚时钟输出低电平时钟  
        USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;     //第二个时钟边沿开始捕获数据  
        USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;//最后一位数据的时钟脉冲不从SCLK输出  
        USART_ClockInit(USART1, &USART_ClockInitStructure);  
      USART_Init(USART1, &USART_InitStructure);//USART1初始化  
      USART_Cmd(USART1, ENABLE);//使能USART1时钟外设  
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能接受中断  
     USART_Cmd(USART1, ENABLE);  
    }  
      
    void delay_18b20(u32 nus)    //18b20按照严格的时序工作,这是专属延时  
    {  
        u16 i;  
        while(nus--)  
            for(i=12;i>0;i--);  
    }  
      
      
          
    void Init18B20(void)  //18B20初始化  
    {  
       u8 aa=0;  
       u8 count =0;  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能PC时钟  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//开漏输出  
      GPIO_Init(GPIOC, &GPIO_InitStructure);  
       Set_B20() ;   // GPIO_SetBits(GPIOC, GPIO_Pin_12)   
       delay_18b20(1);  
       Reset_B20();  
      
       delay_18b20(480);  
       Set_B20();  
    //  delay_18b20(500);  
       delay_18b20(480);  
      
        count=0;  
        aa=Read_B20();         //温度读取  
        /****个人认为限制温度不超过99度,作为一个保护*/  
        while(!aa && count<100)     
       {  
        aa=Read_B20();  
        count++;          //相当一个for()和while结合  
       }  
       if(count>=99)  
            Error_Flag=1;  
        else  
            Error_Flag=0;  
         
    }  
        
    unsigned char Read18B20(void)//按位读取数据  
    {    
    unsigned char i=0;  
    unsigned char date=0;  
    u8 tempp;  
       for(i=8;i>0;i--)  
       {  
      
       Reset_B20();   //打开PC12  
       date>>=1;    //标志右移一位  
       delay_18b20(1);  
       Set_B20();    //关闭  
        delay_18b20(1);  
       tempp=Read_B20();   //读取温度  
      
       if(tempp)  
            date|=0x80;     // 1000 0000   将最高位填1 ,然后右移,每次最高位由0变1,使8位全部传递完毕 0xff = 1111 1111  
        delay_18b20(60);  
        }  
        return(date);  
    }  
    void Write18B20(unsigned char date)//写数据  
    {  
        unsigned char i=0;  
      
        for (i=8; i>0; i--)  
        {  
            Reset_B20();   
            delay_18b20(1);           
            if(date & 0x01)           
            {     
                Set_B20();  
            }  
            else  
            {   Reset_B20();}  
            delay_18b20(60);  
            date>>=1;        
             Set_B20();  
             delay_18b20(1);  
                  
        }  
        delay_18b20(15);  
    }  
      
     float Read_T()//读温度  
    {     
            unsigned char TUp,TDown;  
        unsigned char fTemp;  
        u8 TT=0;  
      
         float Temp = 0;  
        Init18B20();  
        Write18B20(0xcc);       
        Write18B20(0x44);      
        Init18B20();  
        Write18B20(0xcc);     
        Write18B20(0xbe);     
        TDown = Read18B20();      
        TUp = Read18B20();        
          
        if(TUp>0x7f)        
        {  
            TDown=~TDown;    
            TUp=~TUp+1;   
            TUp/=8;            
            zf=1;           
        }  
        else  
            zf=0;       
      
        fTemp=TDown&0x0f;         
        TUp<<=4;  
        TDown>>=4;  
        TT=TUp|TDown;  
        Temp=TT+(float)fTemp/16;          
        return(Temp);  
    }  
                                       
    int main(void)  
    {  
              
      /*!< At this stage the microcontroller clock setting is already configured,  
           this is done through SystemInit() function which is called from startup 
           file (startup_stm32f10x_xx.s) before to branch to application main. 
           To reconfigure the default setting of SystemInit() function, refer to 
           system_stm32f10x.c file 
         */       
             
      /* System Clocks Configuration */  
        char ID[8];  
        int i;  
      RCC_Configuration();  
      USART_int(115200);  
        SysTick_Configuration();  
        printf(" config done...\r\n");  
      delay_ms(1000);  
          
        Init18B20();     //初始化  
        Write18B20(0x33);  //写入读取地址的命令  
        delay_18b20(20);  
        for(i=0;i<8;i++)   //这里必须用for不然 只会输出printf("event 1 oc......\r\n")这句,不会继续运行  
        {  
            ID[i] = Read18B20();//读取地址  
        }  
          
        while(1)  
        {  
            if(flag == 300)  
            {  
                printf("At the moment of ID is:")   ;   
                for(i=0;i<8;i++)     //字符不能直接输出,要按位输出  
            {  
              printf("%u",ID[i]);//输出地址  
            }  
                printf("\r\n")  ;  
            }  
            if(flag == 500)  
            {             
                printf("The Temperature is:%f\r\n",Read_T());//读取温度并输出  
                printf("===================================================\r\n");  
        }  
        }  
    }  
      
      
      
    #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\r\n", file, line) */  
      
      /* Infinite loop */  
      while (1)  
      {  
      }  
    }  
      
    #endif  
      
    /** 
      * @} 
      */   
      
    /** 
      * @} 
      */   
      
    #ifdef __GNUC__  
      /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf 
         set to 'Yes') calls __io_putchar() */  
      #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)  
    #else  
      #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)  
    #endif /* __GNUC__ */  
        
      
      
    /** 
      * @brief  Retargets the C library printf function to the USART. 
      * @param  None 
      * @retval None 
      */  
    PUTCHAR_PROTOTYPE  
    {  
      /* Place your implementation of fputc here */  
      /* e.g. write a character to the USART */  
      USART_SendData(EVAL_COM1, (uint8_t) ch);  
      
      /* Loop until the end of transmission */  
      while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)  
      {}  
      
      return ch;  
    }  
      
    #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\r\n", file, line) */  
      
      /* Infinite loop */  
      while (1)  
      {  
      }  
    }  
      
    #endif  
      
    /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/  


 


菜鸟
2014-12-25 13:50:56     打赏
17楼

view plaincopy to clipboardprint?

    /** 
      ****************************************************************************** 
      * @file    EXTI/EXTI_Config/main.c  
      * @author  MCD Application Team 
      * @version V3.5.0 
      * @date    08-April-2011 
      * @brief   Main program body 
      ****************************************************************************** 
      * @attention 
      * 
      * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 
      * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 
      * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 
      * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 
      * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 
      * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 
      * 
      * 
     
        © COPYRIGHT 2011 STMicroelectronics 
     
    ****************************************************************************** 
      */   
      
    /* Includes ------------------------------------------------------------------*/  
    #include "stm32f10x.h"  
    #include "stm32_eval.h"  
    #include   
    /** @addtogroup STM32F10x_StdPeriph_Examples 
      * @{ 
      */  
      
    /** @addtogroup EXTI_Config 
      * @{ 
      */   
      
    /* Private typedef -----------------------------------------------------------*/  
    /* Private define ------------------------------------------------------------*/  
    /* Private macro -------------------------------------------------------------*/  
    /* Private variables ---------------------------------------------------------*/  
    EXTI_InitTypeDef   EXTI_InitStructure;  
    GPIO_InitTypeDef   GPIO_InitStructure;  
    NVIC_InitTypeDef   NVIC_InitStructure;  
    USART_InitTypeDef USART_InitStructure;  
    USART_ClockInitTypeDef USART_ClockInitStructure;  
    /* Private function prototypes -----------------------------------------------*/  
    void EXTIkeyS1_Config(void);  
    void EXTIkeyS2_Config(void);  
    void EXTIkeyS3_Config(void);  
    void EXTIkeyS4_Config(void);  
    void RCC_Configuration(void)  
    {  
      RCC_DeInit();  
          
      RCC_HSICmd(ENABLE);  
      while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);  
        
      RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);  
        
      RCC_HSEConfig(RCC_HSE_OFF);  
      RCC_LSEConfig(RCC_LSE_OFF);  
      RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz  
      RCC_PLLCmd(ENABLE);  
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  
      RCC_ADCCLKConfig(RCC_PCLK2_Div4);  
      RCC_PCLK2Config(RCC_HCLK_Div1);  
      RCC_PCLK1Config(RCC_HCLK_Div2);  
      RCC_HCLKConfig(RCC_SYSCLK_Div1);  
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  
      while(RCC_GetSYSCLKSource() != 0x08);  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);  
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);  
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
      GPIO_Init(GPIOD, &GPIO_InitStructure);  
        GPIO_ResetBits(GPIOD,GPIO_Pin_2);  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);  
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
      GPIO_Init(GPIOC, &GPIO_InitStructure);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);  
    }  
      
    void USART_int(long BaudRate)  
    {  
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   
        GPIO_Init(GPIOA, &GPIO_InitStructure);  
        /* PA10 USART1_Rx  */  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
        GPIO_Init(GPIOA, &GPIO_InitStructure);  
      /* USARTx configured as follow: 
            - BaudRate = 115200 baud   
            - Word Length = 8 Bits 
            - One Stop Bit 
            - No parity 
            - Hardware flow control disabled (RTS and CTS signals) 
            - Receive and transmit enabled 
      */  
      USART_InitStructure.USART_BaudRate = BaudRate;//??????  
      USART_InitStructure.USART_WordLength = USART_WordLength_8b;//???????8bit  
      USART_InitStructure.USART_StopBits = USART_StopBits_1;//????1  
      USART_InitStructure.USART_Parity = USART_Parity_No;//????  
      USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//??????none  
      USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//??????????  
        USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;       
      USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;        
      USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;        
      USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;  
      USART_ClockInit(USART1, &USART_ClockInitStructure);  
      USART_Init(USART1, &USART_InitStructure);  
      USART_Cmd(USART1, ENABLE);  
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  
      USART_Cmd(USART1, ENABLE);  
       
      /* Configure four bit for preemption priority */  
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);  
      /* Enable the USART1 Interrupt */  
      NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //  
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15;  
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
      NVIC_Init(&NVIC_InitStructure);  
    }  

view plaincopy to clipboardprint?

    void EXTIkeyS1_Config(void)  
    {  
      /* Enable GPIOA clock */  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  
        
      /* Configure PA.00 pin as input floating */  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
      GPIO_Init(GPIOA, &GPIO_InitStructure);  
      
      /* Enable AFIO clock */  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  
      
      /* Connect EXTI0 Line to PA.00 pin */  
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);  
      
      /* Configure EXTI0 line */  
      EXTI_InitStructure.EXTI_Line = EXTI_Line8;  
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;    
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;  
      EXTI_Init(&EXTI_InitStructure);  
      
      /* Enable and set EXTI0 Interrupt to the lowest priority */  
      NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;  
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;  
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;  
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
      NVIC_Init(&NVIC_InitStructure);  
    }  
      
    /** 
      * @brief  Configure PB.09 or PG.08 in interrupt mode 
      * @param  None 
      * @retval None 
      */  
    void EXTIkeyS2_Config(void)  
    {  
      /* Enable GPIOB clock */  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  
      
      /* Configure PB.09 pin as input floating */  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
      GPIO_Init(GPIOC, &GPIO_InitStructure);  
      
      /* Enable AFIO clock */  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  
      /* Connect EXTI9 Line to PB.09 pin */  
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9);  
      
      /* Configure EXTI9 line */  
      EXTI_InitStructure.EXTI_Line = EXTI_Line9;  
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;  
      EXTI_Init(&EXTI_InitStructure);  
      
      /* Enable and set EXTI9_5 Interrupt to the lowest priority */  
      NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;  
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;  
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;  
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
      
      NVIC_Init(&NVIC_InitStructure);  
    }  
      
    void EXTIkeyS3_Config(void)  
    {  
      /* Enable GPIOB clock */  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  
      
      /* Configure PB.10 pin as input floating */  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
      GPIO_Init(GPIOC, &GPIO_InitStructure);  
      
      /* Enable AFIO clock */  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  
      /* Connect EXTI9 Line to PB.10 pin */  
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);  
      
      /* Configure EXTI10 line */  
      EXTI_InitStructure.EXTI_Line = EXTI_Line10;  
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;  
      EXTI_Init(&EXTI_InitStructure);  
      
      /* Enable and set EXTI15_10 Interrupt to the lowest priority */  
      NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;  
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;  
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;  
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
      
      NVIC_Init(&NVIC_InitStructure);  
    }  
      
    void EXTIkeyS4_Config(void)  
    {  
      /* Enable GPIOB clock */  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  
      
      /* Configure PB.11 pin as input floating */  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
      GPIO_Init(GPIOC, &GPIO_InitStructure);  
      
      /* Enable AFIO clock */  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  
      /* Connect EXTI11 Line to PB.11 pin */  
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);  
      
      /* Configure EXTI11 line */  
      EXTI_InitStructure.EXTI_Line = EXTI_Line11;  
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;  
      EXTI_Init(&EXTI_InitStructure);  
      
      /* Enable and set EXTI15_10 Interrupt to the lowest priority */  
      NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;  
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;  
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;  
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
      
      NVIC_Init(&NVIC_InitStructure);  
    }  

view plaincopy to clipboardprint?

    /* Private functions ---------------------------------------------------------*/  
      
    /** 
      * @brief  Main program. 
      * @param  None 
      * @retval None 
      */  
    int main(void)  
    {  
      RCC_Configuration();  
      EXTIkeyS1_Config();  
      EXTIkeyS2_Config();  
        EXTIkeyS3_Config();  
        EXTIkeyS4_Config();  
      USART_int(115200);  
        printf(" 请进行中断  
    \n");  
                
      while (1)  
      {  
      }  
    }  
      
    /** 
      * @brief  Configure PA.00 in interrupt mode 
      * @param  None 
      * @retval None 
      */  
      
    /******************************************************************************/  
    /*            STM32F10x Peripherals Interrupt Handlers                        */  
    /******************************************************************************/  
      
    /** 
      * @brief  This function handles External lines 9 to 5 interrupt request. 
      * @param  None 
      * @retval None 
      */  
    void EXTI9_5_IRQHandler(void)  
    {  
      if(EXTI_GetITStatus(EXTI_Line9) != RESET)  
      {  
         GPIO_SetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);  
         printf("S2键中断  
    \n");  
        EXTI_ClearITPendingBit(EXTI_Line9);  
      }  
        if(EXTI_GetITStatus(EXTI_Line8) != RESET)  
      {  
         GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);  
         printf("S1键中断  
    \n");  
        EXTI_ClearITPendingBit(EXTI_Line8);  
      }  
    }  
      
    void EXTI15_10_IRQHandler(void)  
    {  
                if(EXTI_GetITStatus(EXTI_Line10) != RESET)  
      {  
         GPIO_ResetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);  
         printf("S3键中断  
    \n");  
        EXTI_ClearITPendingBit(EXTI_Line10);  
      }  
            if(EXTI_GetITStatus(EXTI_Line11) != RESET)  
      {  
         GPIO_ResetBits(GPIOC,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);  
         printf("S4键中断  
    \n");  
        EXTI_ClearITPendingBit(EXTI_Line11);  
      }  
    }  
    #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\r\n", file, line) */  
      
      /* Infinite loop */  
      while (1)  
      {  
      }  
    }  
      
    #endif  
      
    /** 
      * @} 
      */   
      
    /** 
      * @} 
      */   
      
    #ifdef __GNUC__  
      /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf 
         set to 'Yes') calls __io_putchar() */  
      #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)  
    #else  
      #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)  
    #endif /* __GNUC__ */  
        
      
      
    /** 
      * @brief  Retargets the C library printf function to the USART. 
      * @param  None 
      * @retval None 
      */  
    PUTCHAR_PROTOTYPE  
    {  
      /* Place your implementation of fputc here */  
      /* e.g. write a character to the USART */  
      USART_SendData(EVAL_COM1, (uint8_t) ch);  
      
      /* Loop until the end of transmission */  
      while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)  
      {}  
      
      return ch;  
    }  
      
    #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\r\n", file, line) */  
      
      /* Infinite loop */  
      while (1)  
      {  
      }  
    }  
      
    #endif  
      
    /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/  


http://http://v.youku.com/v_show/id_XODM2MjAzOTU2.html

菜鸟
2014-12-25 14:06:37     打赏
18楼
view plaincopy to clipboardprint?

    #include "stm32f10x.h"    
    #include "stm32_eval.h"    
    #include    "stdio.h"    
    #include "math.h"    
    #define buff_size  16;         
    char rx_buff[], rx_buff_count=0;    
        
    GPIO_InitTypeDef  GPIO_InitStructure;    
    USART_InitTypeDef  USART_InitStructure;    
    NVIC_InitTypeDef  NVIC_InitStructure;    
    USART_ClockInitTypeDef  USART_ClockInitStructure;    
        
    void RCC_Configuration(void)    
    {    
        RCC_DeInit();    
        RCC_HSICmd(ENABLE);    
        while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);    
        RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);    
        RCC_HSEConfig(RCC_HSE_OFF);    
        RCC_LSEConfig(RCC_LSE_OFF);    
        RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz    
        RCC_PLLCmd(ENABLE);    
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);    
        RCC_ADCCLKConfig(RCC_PCLK2_Div4);    
        RCC_PCLK2Config(RCC_HCLK_Div1);    
        RCC_PCLK1Config(RCC_HCLK_Div2);    
        RCC_HCLKConfig(RCC_SYSCLK_Div1);    
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    
        while(RCC_GetSYSCLKSource() != 0x08);    
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);    
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG    
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;    
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    
        GPIO_Init(GPIOD, &GPIO_InitStructure);    
        GPIO_ResetBits(GPIOD,GPIO_Pin_2);//关闭蜂鸣器    
    }    
    void GPIO_INIT()    
    {    
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能PC时钟    
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//PC0-PC7    
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出     
        GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化PC    
    }    
        
    void USART_int(long BaudRate)    
    {    
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//使能PA USART1    
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//TX位于PA9     
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;    
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出    
       GPIO_Init(GPIOA, &GPIO_InitStructure);//TX初始化 PA9     
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//RX位于PA10     
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//悬空输入    
       GPIO_Init(GPIOA, &GPIO_InitStructure);//RX初始化 PA10     
      /* USARTx configured as follow:  
            - BaudRate = 115200 baud    
            - Word Length = 8 Bits  
            - One Stop Bit  
            - No parity  
            - Hardware flow control disabled (RTS and CTS signals)  
            - Receive and transmit enabled  
      */    
        USART_InitStructure.USART_BaudRate = BaudRate;//传输速率    
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长8比特    
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1     
        USART_InitStructure.USART_Parity = USART_Parity_No;//    
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控位none    
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//接收和发送模式    
        USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;         
      USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;          
      USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;          
      USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;    
        USART_ClockInit(USART1, &USART_ClockInitStructure);//初始化USART1时钟    
        USART_Init(USART1, &USART_InitStructure);//初始化USART1     
        USART_Cmd(USART1, ENABLE);     
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);    
        USART_Cmd(USART1, ENABLE);    
      /* Configure four bit for preemption priority */    
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//优先级    
      /* Enable the USART1 Interrupt */    
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //选择USART1中断通道    
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15;    
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    
        NVIC_Init(&NVIC_InitStructure);//    
    }    
        
    /*delay_us*/     
    void delay_us(u32 n)    
    {    
        u8 j;    
        while(n--)    
        for(j=0;j<10;j++);    
    }    
    /*delay_ms*/     
    void  delay_ms(u32 n)    
    {    
        while(n--)    
        delay_us(1000);    
    }    
        
    void USART_SendStr(char *str)//    
    {    
       while((*str)!='\0')//  
        {       
            USART_SendData(USART1,*str++);    
            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);    
        }    
    }    
        
    unsigned int translate(char *S,char j)//    
    {    
        unsigned int a[4],sum=0;    
        char i;    
        for(i=0;i<j;i++)    
        {    
            a[i]=S[5+j-1-i]-48;//将字符转成整型数据    
            sum+=a[i]*pow(10,i);//按照每一位的权值相乘再相加,还原data=n的本来面貌    
        }    
        return sum;//sum保存目标整型数据    
    }     
        
    void func(char *S,char LEN)    
    {     
        char count;//    
        unsigned int sum,i,j,k;    
        if((LEN!=6)&(LEN!=7)&(LEN!=8)&(LEN!=9))//data=1~999    
        {USART_SendStr("\r\n Erro input!!!\r\n");}//    
        else     
        {    
            count=LEN-5;//   
            sum = translate(S,count);//   
            GPIO_SetBits(GPIOC,0x000000ff);//all LED off     
            for(k=0;k<3;k++)//  
            {    
                i=0x00000100;    
                for(j=1;j<=8;j++)//LED D8-D1    
                {    
                    i>>=1;    
                    GPIO_ResetBits(GPIOC,i);    // on PC7-PC0 D8-D1    
                    delay_ms(50);    
                    GPIO_SetBits(GPIOC,i);    
                    delay_ms(sum);//  
                }    
            }    
        }    
    }    
        
    void input_ASK()    
    {    
        char j;    
        func(rx_buff,rx_buff_count);    
        rx_buff_count=0;    
        for (j=0;j<rx_buff_count;j++)    
        {rx_buff[j]='\0';}//    
        USART_SendStr("\n>");    
    }    
        
    int main(void)    
    {     
        RCC_Configuration();    
        GPIO_INIT();    
        USART_int(9600);    
        GPIO_ResetBits(GPIOC,0x000000ff);//    
        delay_ms(200);    
        GPIO_SetBits(GPIOC,0x000000ff);//l  
        USART_SendStr("SyStem booting......\r\n");//     
        USART_SendStr("\n>");//     
        while(1)    
            {}    
    }    
        
    void USART1_IRQHandler(void)     
    {     
      while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)    
      {  }     
        if(USART_ReceiveData(USART1)==0x0d)//    
        {input_ASK();}    
        else    
        {    
            USART_SendData(USART1,USART_ReceiveData(USART1));    
            rx_buff[rx_buff_count]= USART_ReceiveData(USART1);    
            rx_buff_count++;    
        }    
        USART_ClearFlag(USART1, USART_FLAG_RXNE);    

 

http://v.youku.com/v_show/id_XODU2Mzk2MTIw.html

菜鸟
2014-12-25 14:26:31     打赏
19楼
http://v.youku.com/v_show/id_XODEyNjk5MjAw.html
view plaincopy to clipboardprint?

    /* Includes ------------------------------------------------------------------*/  
    #include "stm32f10x.h"  
    #include "stm32_eval.h"  
    GPIO_InitTypeDef GPIO_InitStructure;  
      
    void RCC_Configuration(void)//始终配置  
    {  
      RCC_DeInit();//将RCC寄存器重设为缺省值  
          
      RCC_HSICmd(ENABLE);//使能内部高速晶振  
      while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//HSI晶振返回reset  
        
      RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//选择HSI作为系统时钟  
        
      RCC_HSEConfig(RCC_HSE_OFF);//HSE晶振关  
      RCC_LSEConfig(RCC_LSE_OFF);//LSE晶振关  
      RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //  72HMz  
      RCC_PLLCmd(ENABLE);//使能PLL状态  
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  
      RCC_ADCCLKConfig(RCC_PCLK2_Div4);//ADC时钟=PCLK/4  
      RCC_PCLK2Config(RCC_HCLK_Div1);//APB2时钟=HCLK  
      RCC_PCLK1Config(RCC_HCLK_Div2);//APB1时钟=HCLK/2  
      RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB时钟=系统时钟  
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择PLL作为系统时钟  
      while(RCC_GetSYSCLKSource() != 0x08);  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);  
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
      GPIO_Init(GPIOD, &GPIO_InitStructure);  
        GPIO_ResetBits(GPIOD,GPIO_Pin_2);//关闭蜂鸣器  
          
    }  
    void delay_us(u32 n)  
    {  
        u8 j;  
        while(n--)  
        for(j=0;j<10;j++);  
    }  
      
    void  delay_ms(u32 n)  
    {  
        while(n--)  
        delay_us(1000);  
    }  
      
    int main (void)  
    {  
        char i=0;  
        RCC_Configuration();  
        /*初始化PC*/  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
        GPIO_Init(GPIOC, &GPIO_InitStructure);  
        /*初始化PB*/  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
      GPIO_Init(GPIOB, &GPIO_InitStructure);  
        GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
      
               
          while(1){  
              
            if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==0)   
            if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))  
          {  
           delay_ms(100);if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)){i++;}  
          }  
                  
                  
                  
        if(i>30){i=0;}  
            GPIO_ResetBits(GPIOB,GPIO_Pin_1);  
            GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
              
            switch(i)  
            {  
             case 0 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);//0  
             break;  
             case 1 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//1  
             break;  
                case 2 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//2  
                break;  
                case 3 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);//3  
                break;  
                case 4 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12);//4  
                break;  
                case 5 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_14);//5  
                break;  
                case 6 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);//6  
                break;  
                case 7 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);//7  
                break;  
                case 8 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);//8  
                break;  
                case 9 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);//9  
                break;  
                case 10 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);    
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//10  
                break;  
                case 11 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);  
                 delay_ms(100);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//11     
                break;  
                case 12 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                  
                        GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//12     
                break;  
                case 13 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);    
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//13  
                case 14 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12);    
                  
                            GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//14    
                break;  
                case 15 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_14);    
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//15  
                break;  
                case 16 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);    
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//16  
                break;  
                case 17 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);    
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//17  
                break;  
                case 18 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);   
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//18  
                break;  
                case 19 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);   
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);//19  
                break;  
                case 20 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);    
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//20  
                break;  
                case 21 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);  
                 delay_ms(100);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);  
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//21     
                break;  
                case 22 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);  
                  
                        GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);  
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//22     
                break;  
                case 23 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);   
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//23  
                case 24 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12);  
                  
                            GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//24    
                break;  
                case 25 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_14);  
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//25  
                break;  
                case 26 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);   
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//26  
                break;  
                case 27 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits (GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits (GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);  
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//27  
                break;  
                case 28 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//28  
                break;  
                case 29 :   
                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);    
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);//29  
                break;  
                case 30 :   
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);  
                 GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
                 delay_ms(100);    
           GPIO_ResetBits(GPIOB,GPIO_Pin_1);    
           GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);  
                  
                      GPIO_SetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);    
                      delay_ms(200);    
                      GPIO_ResetBits(GPIOB,GPIO_Pin_15);    
                      GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);//30  
                break;  
    }  
      
    }  
    }  

 


菜鸟
2014-12-25 14:55:59     打赏
20楼
http://v.youku.com/v_show/id_XODU2NDI4MjYw.html
view plaincopy to clipboardprint?

       
    <pre name="code" class="c">#include "stm32f10x.h"  
    #include "stm32_eval.h"  
    #include <stdio.h>  
    #define VREF 3.3  
    EXTI_InitTypeDef   EXTI_InitStructure;    
    GPIO_InitTypeDef   GPIO_InitStructure;    
    NVIC_InitTypeDef   NVIC_InitStructure;    
    USART_InitTypeDef USART_InitStructure;    
    USART_ClockInitTypeDef USART_ClockInitStructure;  
    unsigned char i=0;  
    unsigned char count=0;    
      
    void delay_us(u32 n)    
    {    
        u8 j;    
        while(n--)    
        for(j=0;j<10;j++);    
    }    
    /*********************************/    
    void  delay_ms(u32 n)    
    {    
        while(n--)    
        delay_us(1000);    
    }    
    int Display[10]={ GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8,    
                        GPIO_Pin_9|GPIO_Pin_12,    
                        GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5,    
                      GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5,    
                        GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5,    
                        GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5,    
                      GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8|GPIO_Pin_5,    
                        GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12,       
                      GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14,    
                        GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14 };    
         
    void Dis_number(unsigned char i)    
    {    
        char one=0,ten=0;       
        one=i%10; ten=i/10;      
        GPIO_SetBits(GPIOB,GPIO_Pin_1);       
        GPIO_ResetBits(GPIOB,Display[one]);       
        delay_ms(10);       
        GPIO_ResetBits(GPIOB,GPIO_Pin_1);       
        GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);    
                       
        GPIO_SetBits(GPIOB,GPIO_Pin_15);       
        GPIO_ResetBits(GPIOB,Display[ten]);         
        delay_ms(10);       
        GPIO_ResetBits(GPIOB,GPIO_Pin_15);       
        GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);    
    }    
      
      
    void RCC_Configuration(void)  
    {  
      RCC_DeInit();  
      RCC_HSICmd(ENABLE);  
      while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);  
      RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);  
      RCC_HSEConfig(RCC_HSE_OFF);  
      RCC_LSEConfig(RCC_LSE_OFF);  
      RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); //72HMz  
      RCC_PLLCmd(ENABLE);  
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  
      RCC_ADCCLKConfig(RCC_PCLK2_Div4);  
      RCC_PCLK2Config(RCC_HCLK_Div1);  
      RCC_PCLK1Config(RCC_HCLK_Div2);  
      RCC_HCLKConfig(RCC_SYSCLK_Div1);  
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  
      while(RCC_GetSYSCLKSource() != 0x08);  
           //SystemInit();  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);  
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);  
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
      GPIO_Init(GPIOD, &GPIO_InitStructure);  
        GPIO_ResetBits(GPIOD,GPIO_Pin_2);//蜂鸣器  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);  
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
      GPIO_Init(GPIOC, &GPIO_InitStructure);  
        GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);  
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);  
    }   
    void USART_int(long BaudRate)  
    {  
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   
        GPIO_Init(GPIOA, &GPIO_InitStructure);  
        /* PA10 USART1_Rx  */  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
        GPIO_Init(GPIOA, &GPIO_InitStructure);  
        USART_InitStructure.USART_BaudRate = BaudRate;//??????  
      
      USART_InitStructure.USART_BaudRate = BaudRate;//usart传输波比特    
      USART_InitStructure.USART_WordLength = USART_WordLength_8b;//一帧传输或接收8bit    
      USART_InitStructure.USART_StopBits = USART_StopBits_1;//在帧结尾传输1个停止位    
      USART_InitStructure.USART_Parity = USART_Parity_No;//奇偶失能    
      USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制失能    
      USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//接收使能,发送使能    
      USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;//时钟低电平活动            
      USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;//始终低电平           
      USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;//时钟第二边缘进行数据捕获               
      USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;//最后一位数据的时钟不从SCLK输出    
      USART_ClockInit(USART1, &USART_ClockInitStructure);//使能USART1时钟    
      USART_Init(USART1, &USART_InitStructure);//初始化USART1    
      USART_Cmd(USART1, ENABLE);//使能USART1外设    
      USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能中断    
      USART_Cmd(USART1, ENABLE);    
      /* Configure four bit for preemption priority */    
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);    
      /* Enable the USART1 Interrupt */    
      NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;     
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15;    
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    
      NVIC_Init(&NVIC_InitStructure);    
    }   
      
    void GPIO_INIT()    
    {    
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);    
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;    
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    
      GPIO_Init(GPIOB, &GPIO_InitStructure);    
            
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;    
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    
      GPIO_Init(GPIOC, &GPIO_InitStructure);    
    }    
        
      
    void Iic1_Init(void)  
    {  
            GPIO_InitTypeDef GPIO_InitStructure;  
            I2C_InitTypeDef I2C_InitStructure;  
              
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  
            RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);  
            //PB6-I2C2_SCL PB7-I2C2_SDA PB10-I2C2_SCL PB11-I2C2_SDA  
            /* Configure IO connected to IIC*********************/  
            GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10 | GPIO_Pin_11;  
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;  
            GPIO_Init(GPIOB, &GPIO_InitStructure);  
              
            I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;//配置I2C模式  
            I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;//该参数只有在I2C工作在快速模式下有意义  
            I2C_InitStructure.I2C_OwnAddress1 = 0xA0;//设置第一个设备自身地址  
            I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;//使能应答  
            I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;//地址为7位  
            I2C_InitStructure.I2C_ClockSpeed = 400000;//时钟速率 400KHZ     
            I2C_Cmd(I2C2, ENABLE);  
            I2C_Init(I2C2, &I2C_InitStructure);  
            I2C_AcknowledgeConfig(I2C2, ENABLE);      
    }  
      
      
    void I2C2_WriteByte(unsigned char id,unsigned char write_address,unsigned char byte)  
    {  
            while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));  
            I2C_GenerateSTART(I2C2,ENABLE);  
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));  
            I2C_Send7bitAddress(I2C2,id,I2C_Direction_Transmitter);  
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));  
            I2C_SendData(I2C2, write_address);  
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));  
            I2C_SendData(I2C2, byte);  
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));  
            I2C_GenerateSTOP(I2C2, ENABLE);  
      
            do  
            {                  
                    /* Send START condition */  
                    I2C_GenerateSTART(I2C2, ENABLE);  
                    /* Read I2C2 SR1 register */  
                    /* Send EEPROM address for write */  
                    I2C_Send7bitAddress(I2C2, 0xA0, I2C_Direction_Transmitter);  
            }while(!(I2C_ReadRegister(I2C2, I2C_Register_SR1) & 0x0002));  
      
            /* Clear AF flag */  
            I2C_ClearFlag(I2C2, I2C_FLAG_AF);  
            /* STOP condition */      
            I2C_GenerateSTOP(I2C2, ENABLE);    
    }  
      
      
    unsigned char I2C2_ReadByte(unsigned char  id, unsigned char read_address)  
    {    
            unsigned char temp;           
            while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY)){}  
            I2C_GenerateSTART(I2C2, ENABLE);  
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));  
            I2C_Send7bitAddress(I2C2, id, I2C_Direction_Transmitter);  
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));  
            I2C_Cmd(I2C2, ENABLE);  
            I2C_SendData(I2C2, read_address);    
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));  
            I2C_GenerateSTART(I2C2, ENABLE);  
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));  
            I2C_Send7bitAddress(I2C2, id, I2C_Direction_Receiver);  
            while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));  
            I2C_AcknowledgeConfig(I2C2, DISABLE);  
            I2C_GenerateSTOP(I2C2, ENABLE);  
            while(!(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED)));  
            temp = I2C_ReceiveData(I2C2);  
            I2C_AcknowledgeConfig(I2C2, ENABLE);  
            return temp;  
    }  
      
    void EXTIkeyS1_Config(void)    
    {    
      /* Enable GPIOA clock */    
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    
          
      /* Configure PA.00 pin as input floating */    
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;    
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    
      GPIO_Init(GPIOA, &GPIO_InitStructure);    
        
      /* Enable AFIO clock */    
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    
        
      /* Connect EXTI0 Line to PA.00 pin */    
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);    
        
      /* Configure EXTI0 line */    
      EXTI_InitStructure.EXTI_Line = EXTI_Line8;    
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;      
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;    
      EXTI_Init(&EXTI_InitStructure);    
        
      /* Enable and set EXTI0 Interrupt to the lowest priority */    
      NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;    
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;    
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;    
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    
      NVIC_Init(&NVIC_InitStructure);    
    }  
      
    void EXTI9_5_IRQHandler(void)  //s1  
    {     
        if(EXTI_GetITStatus(EXTI_Line8) != RESET)    
      {    
         i++;         
         I2C2_WriteByte(0xA0,0,i);      
         EXTI_ClearITPendingBit(EXTI_Line8);    
        }   
    }  
      
    int main(void)  
    {  
      RCC_Configuration();  
      USART_int(115200);  
      GPIO_INIT();   
        Iic1_Init();  
        EXTIkeyS1_Config();   
        printf(" config done...\r\n");  
        delay_ms(1000);  
        while(1)    
        {    
         count=I2C2_ReadByte(0xA0,0);       
         Dis_number(count);    
        }    
    }  
      
    #ifdef  USE_FULL_ASSERT  
    void assert_failed(uint8_t* file, uint32_t line)  
    {   
      while (1)  
      {  
      }  
    }  
      
    #endif  
    #ifdef __GNUC__  
      #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)  
    #else  
      #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)  
    #endif /* __GNUC__ */  
      
    PUTCHAR_PROTOTYPE  
    {  
      /* Place your implementation of fputc here */  
      /* e.g. write a character to the USART */  
      USART_SendData(EVAL_COM1, (uint8_t) ch);  
      
      /* Loop until the end of transmission */  
      while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)  
      {}  
      
      return ch;  
    }  
      
    #ifdef  USE_FULL_ASSERT  
      
    void assert_failed(uint8_t* file, uint32_t line)  
    {   
      while (1)  
      {  
      }  
    }  
      
    #endif  
      
    /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/  
    </pre>  
    <p>  
           
    </p>  

 


共21条 2/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]