这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 漓东e学堂 » 30号作业 【 更新】外部中断清零和iic上电计数.

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

30号作业 【 更新】外部中断清零和iic上电计数.

菜鸟
2014-10-22 23:53:10     打赏

焊接成果(截图):http://forum.eepw.com.cn/thread/262630/4#38


stm32调试视频:http://forum.eepw.com.cn/thread/262630/4#37


视频:http://forum.eepw.com.cn/thread/262630/1#4

z型led和rgb代码:http://forum.eepw.com.cn/thread/262630/1#6


keil安装加破解:http:///forum.eepw.com.cn/thread/262433/1#1


 stm32按键切换 数码管计数视频(含有代码):http://forum.eepw.com.cn/thread/262630/1#7


stm32串口控制灯的代码:http://forum.eepw.com.cn/thread/262630/2#18

stm32串口控制流水灯(顺,逆时针)视频:http://forum.eepw.com.cn/thread/262630/2#19


stm32外部中断+独立按键控制led灯的亮与灭(代码+视频+串口调试助手):forum.eepw.com.cn/thread/262630/3#25


stm32定时器中断代码(视频还没来得及录,tim7定时器用不上,不懂为什么.....求各位大虾指导一下)http://forum.eepw.com.cn/thread/262630/3#28

stm32定时器视频已补上,求大家不要吐槽额 http://forum.eepw.com.cn/thread/262630/3/#28


stm32 pwm控制的跑马灯(代码和视频):http://forum.eepw.com.cn/thread/262630/4#31

ADC--PWM控制跑马灯(视频和代码):http://forum.eepw.com.cn/thread/262630/4#36


stm32iic上电计数(视频和代码):http://forum.eepw.com.cn/thread/262630/4#34


spi作业:http://forum.eepw.com.cn/thread/262630/4#40


系统滴答时钟18b20读取18b20的温度与id:http://forum.eepw.com.cn/thread/262630/4#39







菜鸟
2014-10-23 00:07:19     打赏
2楼

明天在录个视频,可好?


菜鸟
2014-10-25 09:23:04     打赏
3楼

菜鸟
2014-10-25 09:28:29     打赏
4楼
STM32代码:
/* Includes ------------------------------------------------------------------*/  
#include "stm32f10x.h"  
#include "stm32_eval.h"  
GPIO_InitTypeDef GPIO_InitStructure;    	//结构体的命名
  
void RCC_Configuration(void)  //RCC时钟配置函数  
{  
  RCC_DeInit();        //复位外设RCC中所有寄存器的值为默认值  
      
  RCC_HSICmd(ENABLE);  //使能外设RCC  
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//判断RCC的标志位是否被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);  //使能外设PLL  
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //判断RCC的标志位是否被RESET   
  
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);//ADC速率为RCC_PCLK2/4  ,配置低速ADC时钟等于SYSCLK/4 
  RCC_PCLK2Config(RCC_HCLK_Div1);   // 配置高速APB时钟等于SYSCLK   
  RCC_PCLK1Config(RCC_HCLK_Div2);  //配置低速APB时钟等于SYSCLK/2  
  RCC_HCLKConfig(RCC_SYSCLK_Div1);  //配置AHB时钟 AHB时钟等于SYSCLK    
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟SYSCLK=PLL时钟  
  while(RCC_GetSYSCLKSource() != 0x08);            //关闭蜂鸣器  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); //使能外设 GPIOD端口时钟 
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  //端口配置PD.2
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO速率  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO输出模式  
  GPIO_Init(GPIOD, &GPIO_InitStructure);//应用结构体的成员  
    GPIO_ResetBits(GPIOD,GPIO_Pin_2); //重置GPIOD  
}  
  
void GPIO_INIT()  //GPIO的初始化  
{  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能外设GPIOC端口时钟 
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能外设GPIAC端口时钟   
  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; //端口配置PB.0至PB.7 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速率为50MHz  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIOS输出模式 (推挽输出) 
  GPIO_Init(GPIOC, &GPIO_InitStructure);  //根据设定参数初始化GPIOB.0至GPIOB.7
  GPIO_Init(GPIOA, &GPIO_InitStructure);  
}  
  
void delay_us(u32 n)   //延时1us  
{  
    u8 j;  
    while(n--)  
    for(j=0;j<10;j++);  
}  
  
void  delay_ms(u32 n)  //延时1ms  
{  
    while(n--)  
    delay_us(1000);  
}  
  
  
  
int main(void)      //主函数开始  
{   
    RCC_Configuration();//调用时钟RCC函数  
 GPIO_INIT();         //调用GPIO函数  
  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);//    led全灭  
 GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);//rgb全灭  
  
    while(1){  
                    GPIO_ResetBits(GPIOC,GPIO_Pin_3);  //亮灯  
        delay_ms(100);  //延时100ms         
        GPIO_SetBits(GPIOC,GPIO_Pin_3); //灭灯          
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_2);  //亮灯  
        delay_ms(100);  
  
                GPIO_SetBits(GPIOC,GPIO_Pin_2);   //灭灯  
                     
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_1);    //亮灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_1);  //灭                                delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_0);   //亮灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_0);    //灭灯  
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_7); //亮灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_7);       //灭灯      
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_6);   //亮灯                         delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_6);     //灭灯        
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_5);  //亮灯                      delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_5);       //灭灯   
        delay_ms(100);  
        GPIO_ResetBits(GPIOC,GPIO_Pin_4);    //亮灯   
        delay_ms(100);  
        GPIO_SetBits(GPIOC,GPIO_Pin_4);       //灭灯   
        delay_ms(100)   ;  
      
          
          
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);  //亮蓝灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_1);      //灭蓝灯  
        delay_ms(100);  
        GPIO_ResetBits(GPIOA,GPIO_Pin_2);  //亮红灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_2);      //灭红灯  
        delay_ms(100);  
        GPIO_ResetBits(GPIOA,GPIO_Pin_3);//亮绿灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_3);         //灭绿灯  
        delay_ms(100)   ;  
        GPIO_ResetBits(GPIOA,GPIO_Pin_3);//亮绿灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_3);       //灭绿灯  
        delay_ms(100)   ;  
        GPIO_ResetBits(GPIOA,GPIO_Pin_2);//亮红灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_2);     //灭红灯  
        delay_ms(100);  
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);//亮蓝灯  
        delay_ms(100);  
        GPIO_SetBits(GPIOA,GPIO_Pin_1);         //灭蓝灯  
        delay_ms(100);  
      
    }  
      
}  

 



菜鸟
2014-10-29 13:40:09     打赏
5楼

c语言不会,c代码真难写啊!!,学渣的世界,学霸不懂。

stm32按键切换,数码管计数视频:





视频地址:http://player.youku.com/player.php/sid/XODEzOTA0NTky/v.swf

stm32按键切换数码管计数代码:

#include "stm32f10x.h"  
#include "stm32_eval.h"  
GPIO_InitTypeDef GPIO_InitStructure; //结构体的命名 
  
void RCC_Configuration(void)  
{  
  RCC_DeInit(); //复位外设RCC的所有寄存器至缺省值(默认值) 
      
  RCC_HSICmd(ENABLE);  //使能外设RCC高速内部时钟 
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); //判断RCC的标志位是否被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);  //使能外设PLL  
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  //判断RCC的标志位是否被RESET  
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);  ADC速率为RCC_PCLK2/4  ,配置低速ADC时钟等于SYSCLK/4 
  RCC_PCLK2Config(RCC_HCLK_Div1);  // 配置高速APB时钟等于SYSCLK   
  RCC_PCLK1Config(RCC_HCLK_Div2);  //配置低速APB时钟等于SYSCLK/2  
  RCC_HCLKConfig(RCC_SYSCLK_Div1);   //配置AHB时钟 AHB时钟等于SYSCLK   
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //配置系统时钟SYSCLK=PLL时钟  
  while(RCC_GetSYSCLKSource() != 0x08);     //关闭蜂鸣器  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); //使能外设 GPIOD端口时钟  
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //端口配置PD.2 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  ;//GPIO速率  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //GPIO输出模式  
  GPIO_Init(GPIOD, &GPIO_InitStructure);  //应用结构体的成员  
    GPIO_ResetBits(GPIOD,GPIO_Pin_2);  //重置GPIOD.2
}  
  
void GPIO_INIT()//输入输出的初始化  
{  
  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//使能外设GPIOC端口时钟   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能外设GPIAC端口时钟   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;   //端口配置PB.0至PB.7 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //GPIO速率为50MHz  
      GPIO_Init(GPIOC, &GPIO_InitStructure);  //GPIOS输出模式 (推挽输出) 
      
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能外设 GPIOB端口时钟   
  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;//根据设定参数初始化GPIOB.0至GPIOB.7  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIOS输出模式 (推挽输出) 
  GPIO_Init(GPIOB, &GPIO_InitStructure);  //根据设定参数初始化GPIOB.0至GPIOB.7
      
}  
  
void delay_us(u32 n)  //延时1us  
{  
    u8 j;  
    while(n--)  
    for(j=0;j<10;j++);  
}  
  
void  delay_ms(u32 n)     //延时1ms  
{  
    while(n--)  
    delay_us(1000);  
}  
   
//定义一个数组,用来显示数字0到9  
 int table[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 s2_20(char temp)   //定义一个函数,在数码管上显示数字  
{  
    char ge=0,shi=0;  //定义个位 十位
    shi=temp/10;  //十位
    ge=temp%10;  //个位
    GPIO_SetBits(GPIOB,GPIO_Pin_15);  //PB.15 输出高
              GPIO_ResetBits(GPIOB,table[shi]);  
          delay_ms(5);    
            GPIO_ResetBits(GPIOB,GPIO_Pin_15); //PB.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); //PB.0到PB.15 输出高 
              
             GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB.1 输出高  
              GPIO_ResetBits(GPIOB,table[ge]);  //个位上显示的数值
  
          delay_ms(5);  
                GPIO_ResetBits(GPIOB,GPIO_Pin_1);  //PB.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); //PB.0到PB.15 输出高  
            if(temp>30)  //若temp>30
            {  
                    GPIO_SetBits(GPIOB,GPIO_Pin_15); //PB.15 输出高 
              GPIO_ResetBits(GPIOB,table[shi]); //显示十位上的数值 
          delay_ms(100);  
            GPIO_ResetBits(GPIOB,GPIO_Pin_15);  //PB.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);  //PB.0到PB.15 输出高  
              
             GPIO_SetBits(GPIOB,GPIO_Pin_1);  //PB.1 输出高 
              GPIO_ResetBits(GPIOB,table[ge]);  //个位上显示的数值
  
          delay_ms(150);  
                GPIO_ResetBits(GPIOB,GPIO_Pin_1);   //PB.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);  //PB.0到PB.15 输出高   
  
            }  
  
}  
  
  
void func()  //定义一个功能函数,使得按键按下去之后,数码管能计数  
{  
    
    char a = 0, b = 0,count=0;   //定义三个计数器。  
    while(1){  
     if(!GPIO_ReadInputDataBit (GPIOC,GPIO_Pin_10)) //判断按键是否按下 PC.10 
      {  
                    delay_ms(100);  
         if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10))  //判断按键是否按下 PC.10 
               {  
                                 count++;  //count自加1;  
              }  
                        }  
             if(count%2==1){     //对2求余==1;
                                                            if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))  //判断按键是否按下 PC.8  
                                                 {   delay_ms(80);     
                                                             if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))  //判断按键是否按下 PC.8  
                                                                             {a++;}  
                                                            }    
                                                                if(a>100)  
                                   {a=0;}  //a>100,a置0;  
                                                        s2_20(a);  
            }  
      
       if(count%2==0){  
           if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)) //判断按键是否按下 PC.9  
         {delay_ms(80);     
          if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)){b++;}}   //判断按键是否按下 PC.9  b计数器自加1 
                 if(b>100){b=0;}    /若b的值大于100,则b清零
                 s2_20(b);} //调用函数
     
       }     
  
}  
  
  
      
  
int main(void)     
{        
     
      RCC_Configuration();       //调用函数  
         GPIO_INIT();      //调用函数  
      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);  //关闭数码管  
            func();  //调用功能函数  
       
     }     

 



菜鸟
2014-10-30 23:44:42     打赏
6楼

首先用count记下s3按键的次数,count%2==0,就是count对2进行求余,即count是偶数,列如4对2求余就等于0;而count%2==1,证明count是奇数,例如5%2==1,道理是一样的。个人觉得也可以理解为真和假的意思,也就是对应二进制中1为真,0为假!

不知道这样理解对吗??


菜鸟
2014-10-30 23:46:48     打赏
7楼

谢谢

 


菜鸟
2014-10-30 23:59:34     打赏
8楼

我想用s3按键进行切换,本来是按键s1按下一次,数码管计数一次,利用s3

后就可以对s2按键进行操作,s2按下一次,数码管计数一次。


菜鸟
2014-11-07 10:55:12     打赏
9楼

参考19号同学的写的,没办法,写不出啊

 


菜鸟
2014-11-07 12:58:16     打赏
10楼
 串口控制led,流水灯顺时针流,逆时针流,z型:
#include "stm32f10x.h"  
#include "stm32_eval.h"  
#include    "stdio.h"  
  
#define buff_size  16;   //宏定义一个buff_size=16
  
GPIO_InitTypeDef GPIO_InitStructure;   //结构体的命名 
char rx_buff[],rx_buff_count=0; //定义一个字符型数组 rx_buff[] ,并且定义一个字符变量rx_buff_count=0
  
void RCC_Configuration(void)  
{  
  RCC_DeInit();  //复位外设RCC的所有寄存器至缺省值(默认值) 
      
  RCC_HSICmd(ENABLE);  //使能外设RCC高速内部时钟 
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);  //判断RCC的标志位是否被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);  //使能外设PLL  
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //判断RCC的标志位是否被RESET     
  RCC_ADCCLKConfig(RCC_PCLK2_Div4);   ADC速率为RCC_PCLK2/4  ,配置低速ADC时钟等于SYSCLK/4 
  RCC_PCLK2Config(RCC_HCLK_Div1);   // 配置高速APB时钟等于SYSCLK   
  RCC_PCLK1Config(RCC_HCLK_Div2);  //配置低速APB时钟等于SYSCLK/2  
  RCC_HCLKConfig(RCC_SYSCLK_Div1);  //配置AHB时钟 AHB时钟等于SYSCLK   
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //配置系统时钟SYSCLK=PLL时钟  
  while(RCC_GetSYSCLKSource() != 0x08);  //关闭蜂鸣器  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); //使能外设 GPIOD端口时钟   
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  //端口配置PD.2 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  ;//GPIO速率  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  ;/GPIO输出模式   
  GPIO_Init(GPIOD, &GPIO_InitStructure);  //应用结构体的成员  
    GPIO_ResetBits(GPIOD,GPIO_Pin_2); //重置GPIOD.2 
}  
  
void GPIO_INIT()  //输入输出的初始化 
{  
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能外设GPIOC端口时钟  
     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;  //端口配置PC.0至PC.7 
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ;//GPIO速率   
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIOS输出模式 (推挽输出)  
     GPIO_Init(GPIOC, &GPIO_InitStructure);  //根据设定参数初始化GPIOC.0至GPIOC.7
    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);  //根据设定参数初始化GPIOC.0至GPIOC.7输出为

高电平
}  
void delay_us(u32 n)  //延时1us
{  
    u8 j;  
    while(n--)  
    for(j=0;j<10;j++);  
}  
void  delay_ms(u32 n)  //延时1ms
{  
    while(n--)  
    delay_us(1000);  
}  
  
  
  
  void USART_int(long BaudRate) //  USART的初始化
{ USART_InitTypeDef USART_InitStructure;  //结构体的命名 
    USART_ClockInitTypeDef USART_ClockInitStructure; //  结构体USART_ClockInit的命名
     NVIC_InitTypeDef NVIC_InitStructure;  //  结构体 NVIC_Init的命名
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);  //使能外设GPIOC端口时钟和外设APB2下的USART1
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;   //端口配置PC.9 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //GPIO速率为10MHz  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //GPIOS输出模式  
    GPIO_Init(GPIOA, &GPIO_InitStructure);   //根据设定参数初始化,引用结构的的成员
    /* PA10 USART1_Rx  */  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  //端口配置PC.10
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //使能外设GPIOC端口时钟   
    GPIO_Init(GPIOA, &GPIO_InitStructure); /根据设定参数初始化,引用结构的的成员 
  /* USARTx configured as follow: 
        - BaudRate = 115200 baud   //波特率设置为115200
        - Word Length = 8 Bits  //字长为8位数据格式
        - One Stop Bit      //一位停止位
        - No parity         //无奇偶校验位
        - Hardware flow control disabled (RTS and CTS signals)    
        - Receive and transmit enabled  
  */  
  USART_InitStructure.USART_BaudRate = BaudRate;       //波特率设置为115200
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 
  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的端口时钟     
  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);  //使能外设RCC  
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  
  USART_Cmd(USART1, ENABLE);   //使能USART1 
  
  /* 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);  //初始化中断  
}  
  
void USART_SendStr(char *str)   //USART发送数据
{  
   while((*str)!='\0')  
{USART_SendData(USART1,*str++);  
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  
}  
}  
  
char strcmp(char *S,char *C,char LEN)   //比较字符串是否相等
{ char count;  
  for(count=0;count<LEN;count++)  
  {  
      if(S[count]!=C[count])  
          {return 0;}            //不相等 返回0
  }  
  return 1;                  //相等 返回值为1
}  
  
void commcmp(char *S,char LEN)   //比较字符串的长度 用switch语句
{   
    int i,j;  
    unsigned char flag=0;  
 if((LEN!=7)&(LEN!=8)&(LEN!=9))  
 {USART_SendStr("\r\n Erro input!!!\r\n");}  
  else{  
    switch(LEN)  
   {  
           
     case 7:                     
              
         {  
                 flag = strcmp(S,"time=50",7);  
          if(flag==1)  
                  {   
                                for(i=0;i<=18;i++)   //循环19次
                                            {  
                                                        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);   //输出高电平
                                                                                        i=0x01;  
                                                                             GPIO_ResetBits(GPIOC,i);  
                                                                                 delay_ms(50);    
                                                                             GPIO_SetBits(GPIOC,i);  
                                                                  
                                                        for(j=1;j<=3;j++)   
                                                        {    
                                                                                    i<<=1;   
                                                                                    GPIO_ResetBits(GPIOC,i);             
                                                            delay_ms(50);    
                                                                                    GPIO_SetBits(GPIOC,i);  
                                                        }    
                                                                            i=0x0100;    
                                                         for(j=1;j<=4;j++)    
                                                        {    
                                                                                    i>>=1;  
                                                                                    GPIO_ResetBits(GPIOC,i);     
                                                                                    delay_ms(50);    
                                                                                    GPIO_SetBits(GPIOC,i);  
                                                      
                                                        }  
                      
                                                        }  
                                                            break;   
  
                            }  
                        }  
                              
                              
     case 8:  
      
             {  
                         flag = strcmp(S,"time=100",8);  
                         if(flag==1)  
                             {  
                                        for(i=0;i<=18;i++)  
                                                 {  
                                                                i=0x0010;  
                                                            for(j=1;j<=4;j++)   
                                                            {    
                                                                                        i>>=1;   
                                                                                        GPIO_ResetBits(GPIOC,i);             
                                                                delay_ms(100);    
                                                                                        GPIO_SetBits(GPIOC,i);  
                                                            }    
                                                                                i=0x08;    
                                                             for(j=1;j<=4;j++)    
                                                            {    
                                                                                        i<<=1;  
                                                                                        GPIO_ResetBits(GPIOC,i);     
                                                                                        delay_ms(100);    
                                                                                        GPIO_SetBits(GPIOC,i);  
                                                            }  
  
                                            }  
                                             break;  
                 }   
                             }  
     case 9:        
             {  
                             flag = strcmp(S,"time=1000",9);  
                             if(flag==1)  
                             {  
                                 for(i=0;i<=18;i++)  
                                 {  
                                            GPIO_SetBits(GPIOC,0x000000ff);   
                                            i=0x00100;  
                                            for(j=1;j<=8;j++)   
                                                    {    
                                                             i>>=1;   
                                                            GPIO_ResetBits(GPIOC,i);             
                                                            delay_ms(1000);    
                                                            GPIO_SetBits(GPIOC,i);  
                                                        }    
                                                          
                                        }  
                                                                      
                      break;   
                 }  
               }       
                 }  
             }  
 }  
          
void input_ASK()  
{     
    char j;  
    commcmp(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);  
    USART_SendStr("SyStem booting......\r\n");  
 while(1){}         
}  
  
  
  
void USART1_IRQHandler(void)   //  USART1中断服务函数
{   
  
  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);  
  
}  

 



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

回复

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