stm32实验

简单的跑马灯实验,GPIOC的567口控制。

1.	#include "stm32f10x.h"
2.	#include 
3.	//#pragma import(__use_no_semihosting)
4.	//5-25行是为了printf能输出
5.	#define ITM_Port8(n)   (*((volatile unsigned char *)(0xE0000000+4*n)))
6.	#define ITM_Port16(n)  (*((volatile unsigned short *)(0xE0000000+4*n)))
7.	#define ITM_Port32(n)  (*((volatile unsigned long *)(0xE0000000+4*n)))
8.	#define DEMCR          (*((volatile unsigned long *)(0xE000EDFC)))
9.	#define TRCENA   0x01000000
10.	
11.	struct __FILE
12.	{  
13.	 int handle;
14.	};
15.	
16.	FILE __stdout;
17.	FILE __stdin;
18.	
19.	int fputc(int ch,FILE *F){
20.	 if(DEMCR & TRCENA){
21.	   while(ITM_Port32(0)==0);
22.	   ITM_Port8(0)=ch;
23.	 }
24.	 return ch;
25.	}
26.	
27.	volatile unsigned char flag=0;
28.	unsigned int flag2=0;
29.	unsigned int CountOfToggle=0;
30.	unsigned int flag3=0;
31.	unsigned int tmp=0;
32.	void LED0_Config(void);
33.	void LED1_Config(void);
34.	void LED2_Config(void);
35.	void LED0_On(void);
36.	void LED1_On(void);
37.	void LED2_On(void);
38.	void LED0_Off(void);
39.	void LED1_Off(void);
40.	void LED2_Off(void);
41.	unsigned char LED0_IsOn(void);
42.	void NVIC_Config(void);
43.	void TIM2_Config(void);
44.	void KEY0_Config(void);
45.	void KEY1_Config(void);
46.	void KEY2_Config(void);
47.	void Key_Read(void);
48.	int main (void){
49.	 LED0_Config();
50.	 LED1_Config();
51.	 LED2_Config();
52.	 KEY0_Config();
53.	 KEY1_Config();
54.	 KEY2_Config();
55.	 NVIC_Config();
56.	 TIM2_Config();
57.	 LED0_Off();
58.	 LED1_Off();
59.	 LED2_Off();
60.	 while(1){
61.	  Key_Read();
62.	  if(tmp!=flag3) {
63.	   TIM2_Config();
64.	   flag2=0;
65.	  } 
66.	  tmp=flag3;
67.	  switch(flag3){
68.	   case 1:                                                             //同开同关
69.	    if(flag)
70.	    {
71.	     if(LED0_IsOn())
72.	     {
73.	      LED0_Off();
74.	      LED1_Off();
75.	      LED2_Off();
76.	     }
77.	     else
78.	     {
79.	      CountOfToggle++;
80.	      printf("CountOfToggle is %d\n",CountOfToggle);
81.	      LED0_On();
82.	      LED1_On();
83.	      LED2_On();
84.	     }
85.	     flag=0;
86.	    }
87.	    break;
88.	   case 2:                                                             //跑马灯
89.	    if(flag){
90.	      flag=0;
91.	      flag2=flag2+1;
92.	     }
93.	    
94.	    switch(flag2){
95.	     case 1 :LED0_On();LED2_Off();LED1_Off();break;
96.	     case 2 :LED1_On();LED0_Off();LED2_Off();break;
97.	     case 3 :LED2_On();LED1_Off();LED0_Off();break;
98.	    }
99.	    
100.	    if(flag2>3) flag2=flag2-3;
101.	    break;
102.	   case 3:                                                              //关
103.	    LED0_Off();
104.	    LED1_Off();
105.	    LED2_Off();
106.	    TIM2_Config();
107.	    CountOfToggle=0;
108.	     break;
109.	  }
110.	 }
111.	}
112.	
113.	 void NVIC_Config(){
114.	  NVIC_InitTypeDef NVIC_InitStructure;
115.	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
116.	  NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
117.	  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
118.	  NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
119.	  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
120.	  NVIC_Init(&NVIC_InitStructure);
121.	 }
122.	 
123.	void TIM2_Config(){
124.	  
125.	  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
126.	  RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2,ENABLE);
127.	  TIM_TimeBaseStructure.TIM_Prescaler=36000-1;
128.	  TIM_TimeBaseStructure.TIM_Period=1000-1;
129.	  TIM_TimeBaseStructure.TIM_ClockDivision=0;
130.	  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
131.	  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
132.	  TIM_ClearFlag(TIM2,TIM_FLAG_Update);
133.	  TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
134.	  TIM_Cmd(TIM2,ENABLE); 
135.	 }
136.	 
137.	void LED0_Config(void){
138.	  GPIO_InitTypeDef GPIO_InitStructure;
139.	  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE); 
140.	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
141.	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
142.	  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
143.	  GPIO_Init(GPIOA,&GPIO_InitStructure);
144.	 
145.	 }
146.	void LED1_Config(void){
147.	  GPIO_InitTypeDef GPIO_InitStructure;
148.	  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE);
149.	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
150.	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
151.	  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
152.	  GPIO_Init(GPIOA,&GPIO_InitStructure);
153.	 
154.	 }
155.	void LED2_Config(void){
156.	  GPIO_InitTypeDef GPIO_InitStructure;
157.	  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE);
158.	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
159.	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
160.	  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
161.	  GPIO_Init(GPIOA,&GPIO_InitStructure);
162.	 }
163.	void LED0_On(void){
164.	  GPIO_ResetBits(GPIOA,GPIO_Pin_8);
165.	}
166.	void LED1_On(void){
167.	  GPIO_ResetBits(GPIOA,GPIO_Pin_7);
168.	}
169.	void LED2_On(void){
170.	  GPIO_ResetBits(GPIOA,GPIO_Pin_6);
171.	}
172.	void LED0_Off(void){
173.	  GPIO_SetBits(GPIOA,GPIO_Pin_8);
174.	}
175.	void LED1_Off(void){
176.	   GPIO_SetBits(GPIOA,GPIO_Pin_7);
177.	}
178.	void LED2_Off(void){
179.	  GPIO_SetBits(GPIOA,GPIO_Pin_6);
180.	}
181.	
182.	
183.	unsigned char LED0_IsOn(void){
184.	 return !GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8);
185.	}
186.	void KEY0_Config(void){
187.	  GPIO_InitTypeDef GPIO_InitStructure;
188.	  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC,ENABLE);
189.	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
190.	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
191.	  GPIO_Init(GPIOC,&GPIO_InitStructure); 
192.	}
193.	void KEY1_Config(void){
194.	  GPIO_InitTypeDef GPIO_InitStructure;
195.	  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC,ENABLE);
196.	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
197.	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
198.	  GPIO_Init(GPIOC,&GPIO_InitStructure);
199.	}
200.	void KEY2_Config(void){
201.	  GPIO_InitTypeDef GPIO_InitStructure;
202.	  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC,ENABLE);
203.	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
204.	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
205.	  GPIO_Init(GPIOC,&GPIO_InitStructure);
206.	} 
207.	void Key_Read(void){
208.	  if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5))
209.	   flag3=1;
210.	  if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6))
211.	    flag3=2;
212.	  if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7))
213.	    flag3=3;
214.	}
2)stm32f10x_it_.c(前台,中断服务程序文件)
1.	#include "stm32f10x_it.h"
2.	
3.	extern volatile unsigned char flag;
4.	void TIM2_IRQHandler(void){
5.	
6.	 if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET){
7.	  flag=1;
8.	  TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
9.	
10.	 }
11.	
12.	}

仿真情况

stm32实验_第1张图片

stm32实验_第2张图片

 

 

你可能感兴趣的:(stm32,单片机,arm)