1 /* Includes ------------------------------------------------------------------*/
2 #include "stm32f10x_lib.h"
3
4 /*******************************************************************************
5 * Function Name : RCC_Configuration
6 * Description : Configures the different system clocks.
7 * Input : None
8 * Output : None
9 * Return : None
10 *******************************************************************************/
11 void RCC_Configuration(void)
12 {
13 ErrorStatus HSEStartUpStatus;
14
15 /* RCC system reset(for debug purpose) */
16 RCC_DeInit();
17
18 /* Enable HSE */
19 RCC_HSEConfig(RCC_HSE_ON);
20
21 /* Wait till HSE is ready */
22 HSEStartUpStatus = RCC_WaitForHSEStartUp();
23
24 if(HSEStartUpStatus == SUCCESS)
25 {
26 /* Enable Prefetch Buffer */
27 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
28
29 /* Flash 2 wait state */
30 FLASH_SetLatency(FLASH_Latency_2);
31
32 /* HCLK = SYSCLK */
33 RCC_HCLKConfig(RCC_SYSCLK_Div1);
34
35 /* PCLK2 = HCLK */
36 RCC_PCLK2Config(RCC_HCLK_Div1);
37
38 /* PCLK1 = HCLK/2 */
39 RCC_PCLK1Config(RCC_HCLK_Div2);
40
41 /* PLLCLK = 8MHz * 9 = 72 MHz */
42 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
43
44 /* Enable PLL */
45 RCC_PLLCmd(ENABLE);
46
47 /* Wait till PLL is ready */
48 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
49 {
50 }
51
52 /* Select PLL as system clock source */
53 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
54
55 /* Wait till PLL is used as system clock source */
56 while(RCC_GetSYSCLKSource() != 0x08)
57 {
58 }
59 }
60 }
61
62 /*******************************************************************************
63 * Function Name : NVIC_Configuration
64 * Description : Configures Vector Table base location.
65 * Input : None
66 * Output : None
67 * Return : None
68 *******************************************************************************/
69 void NVIC_Configuration(void)
70 {
71 #ifdef VECT_TAB_RAM
72 /* Set the Vector Table base location at 0x20000000 */
73 NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
74 #else /* VECT_TAB_FLASH */
75 /* Set the Vector Table base location at 0x08000000 */
76 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
77 #endif
78 }
79
80 /*******************************************************************************
81 * Function Name : GPIO_Configuration
82 * Description : Configures the different GPIO ports.
83 * Input : None
84 * Output : None
85 * Return : None
86 *******************************************************************************/
87 void GPIO_Configuration(void)
88 {
89 /* Enable GPIOC clock */
90 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
91
92 GPIO_InitTypeDef GPIO_InitStructure;
93
94 /* Configure PC.06, PC.07, PC.08 and PC.09 as Output push-pull */
95 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
96 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
97 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
98 GPIO_Init(GPIOC, &GPIO_InitStructure);
99 }
100
101 /*******************************************************************************
102 * Function Name : Delay
103 * Description : Inserts a delay time.
104 * Input : nCount: specifies the delay time length.
105 * Output : None
106 * Return : None
107 *******************************************************************************/
108 void Delay(vu32 nCount)
109 {
110 for(; nCount != 0; nCount--);
111 }
112
113 #ifdef DEBUG
114 /*******************************************************************************
115 * Function Name : assert_failed
116 * Description : Reports the name of the source file and the source line number
117 * where the assert_param error has occurred.
118 * Input : - file: pointer to the source file name
119 * - line: assert_param error line source number
120 * Output : None
121 * Return : None
122 *******************************************************************************/
123 void assert_failed(u8* file, u32 line)
124 {
125 /* User can add his own implementation to report the file name and line number,
126 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
127
128 /* Infinite loop */
129 while (1)
130 {
131 }
132 }
133 #endif
134
135 /*******************************************************************************
136 * Function Name : main
137 * Description : Main program.
138 * Input : None
139 * Output : None
140 * Return : None
141 *******************************************************************************/
142 int main(void)
143 {
144 #ifdef DEBUG
145 debug();
146 #endif
147
148 /* Configure the system clocks */
149 RCC_Configuration();
150
151 /* NVIC Configuration */
152 NVIC_Configuration();
153
154 /* Configure the GPIO ports */
155 GPIO_Configuration();
156
157 /* Infinite loop */
158 while (1)
159 {
160 GPIO_SetBits(GPIOC,GPIO_Pin_6);//点亮LED1
161 Delay(1000000);
162 Delay(1000000);//多点亮一会,使人能看到LED的确切变化
163 GPIO_ResetBits(GPIOC,GPIO_Pin_6);//熄灭LED1
164
165 GPIO_SetBits(GPIOC,GPIO_Pin_7);//点亮LED2
166 Delay(1000000);
167 Delay(1000000);
168 GPIO_ResetBits(GPIOC,GPIO_Pin_7);//熄灭LED2
169
170 GPIO_SetBits(GPIOC,GPIO_Pin_8);//点亮LED3
171 Delay(1000000);
172 Delay(1000000);
173 GPIO_ResetBits(GPIOC,GPIO_Pin_8);//熄灭LED3
174
175 GPIO_SetBits(GPIOC,GPIO_Pin_9);//点亮LED4
176 Delay(1000000);
177 Delay(1000000);
178 GPIO_ResetBits(GPIOC,GPIO_Pin_9);//熄灭LED4
179 }
180 }
181 /*首先,main函数中的debug()函数是在哪定义的呢?是在stm32f10x_lib.c中定义的。*/
182 #ifdef DEBUG
183 /*******************************************************************************
184 * Function Name : debug
185 * Description : This function initialize peripherals pointers.
186 * Input : None
187 * Output : None
188 * Return : None
189 *******************************************************************************/
190 void debug(void)
191 {
192
193 /************************************* ADC ************************************/
194 #ifdef _ADC1
195 ADC1 = (ADC_TypeDef *) ADC1_BASE;
196 #endif /*_ADC1 */
197
198 #ifdef _ADC2
199 ADC2 = (ADC_TypeDef *) ADC2_BASE;
200 #endif /*_ADC2 */
201
202 /************************************* BKP ************************************/
203 #ifdef _BKP
204 BKP = (BKP_TypeDef *) BKP_BASE;
205 #endif /*_BKP */
206
207 /************************************* CAN ************************************/
208 #ifdef _CAN
209 CAN = (CAN_TypeDef *) CAN_BASE;
210 #endif /*_CAN */
211
212 /************************************* DMA ************************************/
213 #ifdef _DMA
214 DMA = (DMA_TypeDef *) DMA_BASE;
215 #endif /*_DMA */
216
217 #ifdef _DMA_Channel1
218 DMA_Channel1 = (DMA_Channel_TypeDef *) DMA_Channel1_BASE;
219 #endif /*_DMA_Channel1 */
220
221 #ifdef _DMA_Channel2
222 DMA_Channel2 = (DMA_Channel_TypeDef *) DMA_Channel2_BASE;
223 #endif /*_DMA_Channel2 */
224
225 #ifdef _DMA_Channel3
226 DMA_Channel3 = (DMA_Channel_TypeDef *) DMA_Channel3_BASE;
227 #endif /*_DMA_Channel3 */
228
229 #ifdef _DMA_Channel4
230 DMA_Channel4 = (DMA_Channel_TypeDef *) DMA_Channel4_BASE;
231 #endif /*_DMA_Channel4 */
232
233 #ifdef _DMA_Channel5
234 DMA_Channel5 = (DMA_Channel_TypeDef *) DMA_Channel5_BASE;
235 #endif /*_DMA_Channel5 */
236
237 #ifdef _DMA_Channel6
238 DMA_Channel6 = (DMA_Channel_TypeDef *) DMA_Channel6_BASE;
239 #endif /*_DMA_Channel6 */
240
241 #ifdef _DMA_Channel7
242 DMA_Channel7 = (DMA_Channel_TypeDef *) DMA_Channel7_BASE;
243 #endif /*_DMA_Channel7 */
244
245 /************************************* EXTI ***********************************/
246 #ifdef _EXTI
247 EXTI = (EXTI_TypeDef *) EXTI_BASE;
248 #endif /*_EXTI */
249
250 /************************************* FLASH and Option Bytes *****************/
251 #ifdef _FLASH
252 FLASH = (FLASH_TypeDef *) FLASH_BASE;
253 OB = (OB_TypeDef *) OB_BASE;
254 #endif /*_FLASH */
255
256 /************************************* GPIO ***********************************/
257 #ifdef _GPIOA
258 GPIOA = (GPIO_TypeDef *) GPIOA_BASE;
259 #endif /*_GPIOA */
260
261 #ifdef _GPIOB
262 GPIOB = (GPIO_TypeDef *) GPIOB_BASE;
263 #endif /*_GPIOB */
264
265 #ifdef _GPIOC
266 GPIOC = (GPIO_TypeDef *) GPIOC_BASE;
267 #endif /*_GPIOC */
268
269 #ifdef _GPIOD
270 GPIOD = (GPIO_TypeDef *) GPIOD_BASE;
271 #endif /*_GPIOD */
272
273 #ifdef _GPIOE
274 GPIOE = (GPIO_TypeDef *) GPIOE_BASE;
275 #endif /*_GPIOE */
276
277 #ifdef _AFIO
278 AFIO = (AFIO_TypeDef *) AFIO_BASE;
279 #endif /*_AFIO */
280
281 /************************************* I2C ************************************/
282 #ifdef _I2C1
283 I2C1 = (I2C_TypeDef *) I2C1_BASE;
284 #endif /*_I2C1 */
285
286 #ifdef _I2C2
287 I2C2 = (I2C_TypeDef *) I2C2_BASE;
288 #endif /*_I2C2 */
289
290 /************************************* IWDG ***********************************/
291 #ifdef _IWDG
292 IWDG = (IWDG_TypeDef *) IWDG_BASE;
293 #endif /*_IWDG */
294
295 /************************************* NVIC ***********************************/
296 #ifdef _NVIC
297 NVIC = (NVIC_TypeDef *) NVIC_BASE;
298 SCB = (SCB_TypeDef *) SCB_BASE;
299 #endif /*_NVIC */
300
301 /************************************* PWR ************************************/
302 #ifdef _PWR
303 PWR = (PWR_TypeDef *) PWR_BASE;
304 #endif /*_PWR */
305
306 /************************************* RCC ************************************/
307 #ifdef _RCC
308 RCC = (RCC_TypeDef *) RCC_BASE;
309 #endif /*_RCC */
310
311 /************************************* RTC ************************************/
312 #ifdef _RTC
313 RTC = (RTC_TypeDef *) RTC_BASE;
314 #endif /*_RTC */
315
316 /************************************* SPI ************************************/
317 #ifdef _SPI1
318 SPI1 = (SPI_TypeDef *) SPI1_BASE;
319 #endif /*_SPI1 */
320
321 #ifdef _SPI2
322 SPI2 = (SPI_TypeDef *) SPI2_BASE;
323 #endif /*_SPI2 */
324
325 /************************************* SysTick ********************************/
326 #ifdef _SysTick
327 SysTick = (SysTick_TypeDef *) SysTick_BASE;
328 #endif /*_SysTick */
329
330 /************************************* TIM1 ***********************************/
331 #ifdef _TIM1
332 TIM1 = (TIM1_TypeDef *) TIM1_BASE;
333 #endif /*_TIM1 */
334
335 /************************************* TIM ************************************/
336 #ifdef _TIM2
337 TIM2 = (TIM_TypeDef *) TIM2_BASE;
338 #endif /*_TIM2 */
339
340 #ifdef _TIM3
341 TIM3 = (TIM_TypeDef *) TIM3_BASE;
342 #endif /*_TIM3 */
343
344 #ifdef _TIM4
345 TIM4 = (TIM_TypeDef *) TIM4_BASE;
346 #endif /*_TIM4 */
347
348 /************************************* USART **********************************/
349 #ifdef _USART1
350 USART1 = (USART_TypeDef *) USART1_BASE;
351 #endif /*_USART1 */
352
353 #ifdef _USART2
354 USART2 = (USART_TypeDef *) USART2_BASE;
355 #endif /*_USART2 */
356
357 #ifdef _USART3
358 USART3 = (USART_TypeDef *) USART3_BASE;
359 #endif /*_USART3 */
360
361 /************************************* WWDG ***********************************/
362 #ifdef _WWDG
363 WWDG = (WWDG_TypeDef *) WWDG_BASE;
364 #endif /*_WWDG */
365 }
366 #endif /* DEBUG*/
367 /*这个看着比较熟悉,好像在哪见过,没错,在stm32f10x_map.h中就有这些定义,这就是为什么,在stm32f10x_config.h中将DEBUF宏定义注释起来时,也能编译过去的原因。*/
368
369
370 /*在stm32f10x_lib.h上右击鼠标,open “stm32f10x_lib.h”,该文件包含了其他所有头文件,而其他所需头文件自动加入。
371 标示符:_ADC,表示如果定义了_ADC,在stm32f10x_lib.h就包含stm32f10x_adc.h,否则,不包含stm32f10x_adc.h,那么,标示符_ADC是在哪定义的呢?是在stm32f10x_conf.h中定义的。*/
372
373 /* Includes ------------------------------------------------------------------*/
374 #include "stm32f10x_map.h"
375
376 #ifdef _ADC
377 #include "stm32f10x_adc.h"
378 #endif /*_ADC */
379
380 #ifdef _BKP
381 #include "stm32f10x_bkp.h"
382 #endif /*_BKP */
383
384 #ifdef _CAN
385 #include "stm32f10x_can.h"
386 #endif /*_CAN */
387
388 #ifdef _DMA
389 #include "stm32f10x_dma.h"
390 #endif /*_DMA */
391
392 #ifdef _EXTI
393 #include "stm32f10x_exti.h"
394 #endif /*_EXTI */
395
396 #ifdef _FLASH
397 #include "stm32f10x_flash.h"
398 #endif /*_FLASH */
399
400 #ifdef _GPIO
401 #include "stm32f10x_gpio.h"
402 #endif /*_GPIO */
403
404 #ifdef _I2C
405 #include "stm32f10x_i2c.h"
406 #endif /*_I2C */
407
408 #ifdef _IWDG
409 #include "stm32f10x_iwdg.h"
410 #endif /*_IWDG */
411
412 #ifdef _NVIC
413 #include "stm32f10x_nvic.h"
414 #endif /*_NVIC */
415
416 #ifdef _PWR
417 #include "stm32f10x_pwr.h"
418 #endif /*_PWR */
419
420 #ifdef _RCC
421 #include "stm32f10x_rcc.h"
422 #endif /*_RCC */
423
424 #ifdef _RTC
425 #include "stm32f10x_rtc.h"
426 #endif /*_RTC */
427
428 #ifdef _SPI
429 #include "stm32f10x_spi.h"
430 #endif /*_SPI */
431
432 #ifdef _SysTick
433 #include "stm32f10x_systick.h"
434 #endif /*_SysTick */
435
436 #ifdef _TIM1
437 #include "stm32f10x_tim1.h"
438 #endif /*_TIM1 */
439
440 #ifdef _TIM
441 #include "stm32f10x_tim.h"
442 #endif /*_TIM */
443
444 #ifdef _USART
445 #include "stm32f10x_usart.h"
446 #endif /*_USART */
447
448 #ifdef _WWDG
449 #include "stm32f10x_wwdg.h"
450 #endif /*_WWDG */
451
452
453 /*在stm32f10x_map.h上右击鼠标,open “stm32f10x_map.h”,打开stm32f10x_map.h文件。
454 stm32f10x_map.h文件定义了所有外设的寄存器数据结构和存储器映像。*/
455 /* Includes ------------------------------------------------------------------*/
456 #include "stm32f10x_conf.h"
457 #include "stm32f10x_type.h"
458 #include "cortexm3_macro.h"
459
460 /* Exported types ------------------------------------------------------------*/
461 /******************************************************************************/
462 /* Peripheral registers structures */
463 /******************************************************************************/
464
465 /*------------------------ Analog to Digital Converter -----------------------*/
466 typedef struct
467 {
468 vu32 SR;
469 vu32 CR1;
470 vu32 CR2;
471 vu32 SMPR1;
472 vu32 SMPR2;
473 vu32 JOFR1;
474 vu32 JOFR2;
475 vu32 JOFR3;
476 vu32 JOFR4;
477 vu32 HTR;
478 vu32 LTR;
479 vu32 SQR1;
480 vu32 SQR2;
481 vu32 SQR3;
482 vu32 JSQR;
483 vu32 JDR1;
484 vu32 JDR2;
485 vu32 JDR3;
486 vu32 JDR4;
487 vu32 DR;
488 } ADC_TypeDef;
489
490 /*------------------------ Backup Registers ----------------------------------*/
491 typedef struct
492 {
493 u32 RESERVED0;
494 vu16 DR1;
495 u16 RESERVED1;
496 vu16 DR2;
497 u16 RESERVED2;
498 vu16 DR3;
499 u16 RESERVED3;
500 vu16 DR4;
501 u16 RESERVED4;
502 vu16 DR5;
503 u16 RESERVED5;
504 vu16 DR6;
505 u16 RESERVED6;
506 vu16 DR7;
507 u16 RESERVED7;
508 vu16 DR8;
509 u16 RESERVED8;
510 vu16 DR9;
511 u16 RESERVED9;
512 vu16 DR10;
513 u16 RESERVED10;
514 vu16 RTCCR;
515 u16 RESERVED11;
516 vu16 CR;
517 u16 RESERVED12;
518 vu16 CSR;
519 u16 RESERVED13;
520 } BKP_TypeDef;
521
522 /*------------------------ Controller Area Network ---------------------------*/
523 typedef struct
524 {
525 vu32 TIR;
526 vu32 TDTR;
527 vu32 TDLR;
528 vu32 TDHR;
529 } CAN_TxMailBox_TypeDef;
530
531 typedef struct
532 {
533 vu32 RIR;
534 vu32 RDTR;
535 vu32 RDLR;
536 vu32 RDHR;
537 } CAN_FIFOMailBox_TypeDef;
538
539 typedef struct
540 {
541 vu32 FR0;
542 vu32 FR1;
543 } CAN_FilterRegister_TypeDef;
544
545 typedef struct
546 {
547 vu32 MCR;
548 vu32 MSR;
549 vu32 TSR;
550 vu32 RF0R;
551 vu32 RF1R;
552 vu32 IER;
553 vu32 ESR;
554 vu32 BTR;
555 u32 RESERVED0[88];
556 CAN_TxMailBox_TypeDef sTxMailBox[3];
557 CAN_FIFOMailBox_TypeDef sFIFOMailBox[2];
558 u32 RESERVED1[12];
559 vu32 FMR;
560 vu32 FM0R;
561 u32 RESERVED2[1];
562 vu32 FS0R;
563 u32 RESERVED3[1];
564 vu32 FFA0R;
565 u32 RESERVED4[1];
566 vu32 FA0R;
567 u32 RESERVED5[8];
568 CAN_FilterRegister_TypeDef sFilterRegister[14];
569 } CAN_TypeDef;
570
571 /*------------------------ DMA Controller ------------------------------------*/
572 typedef struct
573 {
574 vu32 CCR;
575 vu32 CNDTR;
576 vu32 CPAR;
577 vu32 CMAR;
578 } DMA_Channel_TypeDef;
579
580 typedef struct
581 {
582 vu32 ISR;
583 vu32 IFCR;
584 } DMA_TypeDef;
585
586 /*------------------------ External Interrupt/Event Controller ---------------*/
587 typedef struct
588 {
589 vu32 IMR;
590 vu32 EMR;
591 vu32 RTSR;
592 vu32 FTSR;
593 vu32 SWIER;
594 vu32 PR;
595 } EXTI_TypeDef;
596
597 /*------------------------ FLASH and Option Bytes Registers ------------------*/
598 typedef struct
599 {
600 vu32 ACR;
601 vu32 KEYR;
602 vu32 OPTKEYR;
603 vu32 SR;
604 vu32 CR;
605 vu32 AR;
606 vu32 RESERVED;
607 vu32 OBR;
608 vu32 WRPR;
609 } FLASH_TypeDef;
610
611 typedef struct
612 {
613 vu16 RDP;
614 vu16 USER;
615 vu16 Data0;
616 vu16 Data1;
617 vu16 WRP0;
618 vu16 WRP1;
619 vu16 WRP2;
620 vu16 WRP3;
621 } OB_TypeDef;
622
623 /*------------------------ General Purpose and Alternate Function IO ---------*/
624 typedef struct
625 {
626 vu32 CRL;
627 vu32 CRH;
628 vu32 IDR;
629 vu32 ODR;
630 vu32 BSRR;
631 vu32 BRR;
632 vu32 LCKR;
633 } GPIO_TypeDef;
634
635 typedef struct
636 {
637 vu32 EVCR;
638 vu32 MAPR;
639 vu32 EXTICR[4];
640 } AFIO_TypeDef;
641
642 /*------------------------ Inter-integrated Circuit Interface ----------------*/
643 typedef struct
644 {
645 vu16 CR1;
646 u16 RESERVED0;
647 vu16 CR2;
648 u16 RESERVED1;
649 vu16 OAR1;
650 u16 RESERVED2;
651 vu16 OAR2;
652 u16 RESERVED3;
653 vu16 DR;
654 u16 RESERVED4;
655 vu16 SR1;
656 u16 RESERVED5;
657 vu16 SR2;
658 u16 RESERVED6;
659 vu16 CCR;
660 u16 RESERVED7;
661 vu16 TRISE;
662 u16 RESERVED8;
663 } I2C_TypeDef;
664
665 /*------------------------ Independent WATCHDOG ------------------------------*/
666 typedef struct
667 {
668 vu32 KR;
669 vu32 PR;
670 vu32 RLR;
671 vu32 SR;
672 } IWDG_TypeDef;
673
674 /*------------------------ Nested Vectored Interrupt Controller --------------*/
675 typedef struct
676 {
677 vu32 ISER[2];
678 u32 RESERVED0[30];
679 vu32 ICER[2];
680 u32 RSERVED1[30];
681 vu32 ISPR[2];
682 u32 RESERVED2[30];
683 vu32 ICPR[2];
684 u32 RESERVED3[30];
685 vu32 IABR[2];
686 u32 RESERVED4[62];
687 vu32 IPR[11];
688 } NVIC_TypeDef;
689
690 typedef struct
691 {
692 vuc32 CPUID;
693 vu32 ICSR;
694 vu32 VTOR;
695 vu32 AIRCR;
696 vu32 SCR;
697 vu32 CCR;
698 vu32 SHPR[3];
699 vu32 SHCSR;
700 vu32 CFSR;
701 vu32 HFSR;
702 vu32 DFSR;
703 vu32 MMFAR;
704 vu32 BFAR;
705 vu32 AFSR;
706 } SCB_TypeDef;
707
708 /*------------------------ Power Control -------------------------------------*/
709 typedef struct
710 {
711 vu32 CR;
712 vu32 CSR;
713 } PWR_TypeDef;
714
715 /*------------------------ Reset and Clock Control ---------------------------*/
716 typedef struct
717 {
718 vu32 CR;
719 vu32 CFGR;
720 vu32 CIR;
721 vu32 APB2RSTR;
722 vu32 APB1RSTR;
723 vu32 AHBENR;
724 vu32 APB2ENR;
725 vu32 APB1ENR;
726 vu32 BDCR;
727 vu32 CSR;
728 } RCC_TypeDef;
729
730 /*------------------------ Real-Time Clock -----------------------------------*/
731 typedef struct
732 {
733 vu16 CRH;
734 u16 RESERVED0;
735 vu16 CRL;
736 u16 RESERVED1;
737 vu16 PRLH;
738 u16 RESERVED2;
739 vu16 PRLL;
740 u16 RESERVED3;
741 vu16 DIVH;
742 u16 RESERVED4;
743 vu16 DIVL;
744 u16 RESERVED5;
745 vu16 CNTH;
746 u16 RESERVED6;
747 vu16 CNTL;
748 u16 RESERVED7;
749 vu16 ALRH;
750 u16 RESERVED8;
751 vu16 ALRL;
752 u16 RESERVED9;
753 } RTC_TypeDef;
754
755 /*------------------------ Serial Peripheral Interface -----------------------*/
756 typedef struct
757 {
758 vu16 CR1;
759 u16 RESERVED0;
760 vu16 CR2;
761 u16 RESERVED1;
762 vu16 SR;
763 u16 RESERVED2;
764 vu16 DR;
765 u16 RESERVED3;
766 vu16 CRCPR;
767 u16 RESERVED4;
768 vu16 RXCRCR;
769 u16 RESERVED5;
770 vu16 TXCRCR;
771 u16 RESERVED6;
772 } SPI_TypeDef;
773
774 /*------------------------ SystemTick ----------------------------------------*/
775 typedef struct
776 {
777 vu32 CTRL;
778 vu32 LOAD;
779 vu32 VAL;
780 vuc32 CALIB;
781 } SysTick_TypeDef;
782
783 /*------------------------ Advanced Control Timer ----------------------------*/
784 typedef struct
785 {
786 vu16 CR1;
787 u16 RESERVED0;
788 vu16 CR2;
789 u16 RESERVED1;
790 vu16 SMCR;
791 u16 RESERVED2;
792 vu16 DIER;
793 u16 RESERVED3;
794 vu16 SR;
795 u16 RESERVED4;
796 vu16 EGR;
797 u16 RESERVED5;
798 vu16 CCMR1;
799 u16 RESERVED6;
800 vu16 CCMR2;
801 u16 RESERVED7;
802 vu16 CCER;
803 u16 RESERVED8;
804 vu16 CNT;
805 u16 RESERVED9;
806 vu16 PSC;
807 u16 RESERVED10;
808 vu16 ARR;
809 u16 RESERVED11;
810 vu16 RCR;
811 u16 RESERVED12;
812 vu16 CCR1;
813 u16 RESERVED13;
814 vu16 CCR2;
815 u16 RESERVED14;
816 vu16 CCR3;
817 u16 RESERVED15;
818 vu16 CCR4;
819 u16 RESERVED16;
820 vu16 BDTR;
821 u16 RESERVED17;
822 vu16 DCR;
823 u16 RESERVED18;
824 vu16 DMAR;
825 u16 RESERVED19;
826 } TIM1_TypeDef;
827
828 /*------------------------ General Purpose Timer -----------------------------*/
829 typedef struct
830 {
831 vu16 CR1;
832 u16 RESERVED0;
833 vu16 CR2;
834 u16 RESERVED1;
835 vu16 SMCR;
836 u16 RESERVED2;
837 vu16 DIER;
838 u16 RESERVED3;
839 vu16 SR;
840 u16 RESERVED4;
841 vu16 EGR;
842 u16 RESERVED5;
843 vu16 CCMR1;
844 u16 RESERVED6;
845 vu16 CCMR2;
846 u16 RESERVED7;
847 vu16 CCER;
848 u16 RESERVED8;
849 vu16 CNT;
850 u16 RESERVED9;
851 vu16 PSC;
852 u16 RESERVED10;
853 vu16 ARR;
854 u16 RESERVED11[3];
855 vu16 CCR1;
856 u16 RESERVED12;
857 vu16 CCR2;
858 u16 RESERVED13;
859 vu16 CCR3;
860 u16 RESERVED14;
861 vu16 CCR4;
862 u16 RESERVED15[3];
863 vu16 DCR;
864 u16 RESERVED16;
865 vu16 DMAR;
866 u16 RESERVED17;
867 } TIM_TypeDef;
868
869 /*----------------- Universal Synchronous Asynchronous Receiver Transmitter --*/
870 typedef struct
871 {
872 vu16 SR;
873 u16 RESERVED0;
874 vu16 DR;
875 u16 RESERVED1;
876 vu16 BRR;
877 u16 RESERVED2;
878 vu16 CR1;
879 u16 RESERVED3;
880 vu16 CR2;
881 u16 RESERVED4;
882 vu16 CR3;
883 u16 RESERVED5;
884 vu16 GTPR;
885 u16 RESERVED6;
886 } USART_TypeDef;
887
888 /*------------------------ Window WATCHDOG -----------------------------------*/
889 typedef struct
890 {
891 vu32 CR;
892 vu32 CFR;
893 vu32 SR;
894 } WWDG_TypeDef;
895
896 /******************************************************************************/
897 /* Peripheral memory map */
898 /******************************************************************************/
899 /* Peripheral and SRAM base address in the alias region */
900 #define PERIPH_BB_BASE ((u32)0x42000000)
901 #define SRAM_BB_BASE ((u32)0x22000000)
902
903 /* Peripheral and SRAM base address in the bit-band region */
904 #define SRAM_BASE ((u32)0x20000000)
905 #define PERIPH_BASE ((u32)0x40000000)
906
907 /* Flash refisters base address */
908 #define FLASH_BASE ((u32)0x40022000)
909 /* Flash Option Bytes base address */
910 #define OB_BASE ((u32)0x1FFFF800)
911
912 /* Peripheral memory map */
913 #define APB1PERIPH_BASE PERIPH_BASE
914 #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
915 #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
916
917 #define TIM2_BASE (APB1PERIPH_BASE + 0x0000)
918 #define TIM3_BASE (APB1PERIPH_BASE + 0x0400)
919 #define TIM4_BASE (APB1PERIPH_BASE + 0x0800)
920 #define RTC_BASE (APB1PERIPH_BASE + 0x2800)
921 #define WWDG_BASE (APB1PERIPH_BASE + 0x2C00)
922 #define IWDG_BASE (APB1PERIPH_BASE + 0x3000)
923 #define SPI2_BASE (APB1PERIPH_BASE + 0x3800)
924 #define USART2_BASE (APB1PERIPH_BASE + 0x4400)
925 #define USART3_BASE (APB1PERIPH_BASE + 0x4800)
926 #define I2C1_BASE (APB1PERIPH_BASE + 0x5400)
927 #define I2C2_BASE (APB1PERIPH_BASE + 0x5800)
928 #define CAN_BASE (APB1PERIPH_BASE + 0x6400)
929 #define BKP_BASE (APB1PERIPH_BASE + 0x6C00)
930 #define PWR_BASE (APB1PERIPH_BASE + 0x7000)
931
932 #define AFIO_BASE (APB2PERIPH_BASE + 0x0000)
933 #define EXTI_BASE (APB2PERIPH_BASE + 0x0400)
934 #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
935 #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
936 #define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
937 #define GPIOD_BASE (APB2PERIPH_BASE + 0x1400)
938 #define GPIOE_BASE (APB2PERIPH_BASE + 0x1800)
939 #define ADC1_BASE (APB2PERIPH_BASE + 0x2400)
940 #define ADC2_BASE (APB2PERIPH_BASE + 0x2800)
941 #define TIM1_BASE (APB2PERIPH_BASE + 0x2C00)
942 #define SPI1_BASE (APB2PERIPH_BASE + 0x3000)
943 #define USART1_BASE (APB2PERIPH_BASE + 0x3800)
944
945 #define DMA_BASE (AHBPERIPH_BASE + 0x0000)
946 #define DMA_Channel1_BASE (AHBPERIPH_BASE + 0x0008)
947 #define DMA_Channel2_BASE (AHBPERIPH_BASE + 0x001C)
948 #define DMA_Channel3_BASE (AHBPERIPH_BASE + 0x0030)
949 #define DMA_Channel4_BASE (AHBPERIPH_BASE + 0x0044)
950 #define DMA_Channel5_BASE (AHBPERIPH_BASE + 0x0058)
951 #define DMA_Channel6_BASE (AHBPERIPH_BASE + 0x006C)
952 #define DMA_Channel7_BASE (AHBPERIPH_BASE + 0x0080)
953 #define RCC_BASE (AHBPERIPH_BASE + 0x1000)
954
955 /* System Control Space memory map */
956 #define SCS_BASE ((u32)0xE000E000)
957
958 #define SysTick_BASE (SCS_BASE + 0x0010)
959 #define NVIC_BASE (SCS_BASE + 0x0100)
960 #define SCB_BASE (SCS_BASE + 0x0D00)
961
962
963 /******************************************************************************/
964 /* Peripheral declaration */
965 /******************************************************************************/
966
967 /*------------------------ Non Debug Mode ------------------------------------*/
968 #ifndef DEBUG
969 #ifdef _TIM2
970 #define TIM2 ((TIM_TypeDef *) TIM2_BASE)
971 #endif /*_TIM2 */
972
973 #ifdef _TIM3
974 #define TIM3 ((TIM_TypeDef *) TIM3_BASE)
975 #endif /*_TIM3 */
976
977 #ifdef _TIM4
978 #define TIM4 ((TIM_TypeDef *) TIM4_BASE)
979 #endif /*_TIM4 */
980
981 #ifdef _RTC
982 #define RTC ((RTC_TypeDef *) RTC_BASE)
983 #endif /*_RTC */
984
985 #ifdef _WWDG
986 #define WWDG ((WWDG_TypeDef *) WWDG_BASE)
987 #endif /*_WWDG */
988
989 #ifdef _IWDG
990 #define IWDG ((IWDG_TypeDef *) IWDG_BASE)
991 #endif /*_IWDG */
992
993 #ifdef _SPI2
994 #define SPI2 ((SPI_TypeDef *) SPI2_BASE)
995 #endif /*_SPI2 */
996
997 #ifdef _USART2
998 #define USART2 ((USART_TypeDef *) USART2_BASE)
999 #endif /*_USART2 */
1000
1001 #ifdef _USART3
1002 #define USART3 ((USART_TypeDef *) USART3_BASE)
1003 #endif /*_USART3 */
1004
1005 #ifdef _I2C1
1006 #define I2C1 ((I2C_TypeDef *) I2C1_BASE)
1007 #endif /*_I2C1 */
1008
1009 #ifdef _I2C2
1010 #define I2C2 ((I2C_TypeDef *) I2C2_BASE)
1011 #endif /*_I2C2 */
1012
1013 #ifdef _CAN
1014 #define CAN ((CAN_TypeDef *) CAN_BASE)
1015 #endif /*_CAN */
1016
1017 #ifdef _BKP
1018 #define BKP ((BKP_TypeDef *) BKP_BASE)
1019 #endif /*_BKP */
1020
1021 #ifdef _PWR
1022 #define PWR ((PWR_TypeDef *) PWR_BASE)
1023 #endif /*_PWR */
1024
1025 #ifdef _AFIO
1026 #define AFIO ((AFIO_TypeDef *) AFIO_BASE)
1027 #endif /*_AFIO */
1028
1029 #ifdef _EXTI
1030 #define EXTI ((EXTI_TypeDef *) EXTI_BASE)
1031 #endif /*_EXTI */
1032
1033 #ifdef _GPIOA
1034 #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
1035 #endif /*_GPIOA */
1036
1037 #ifdef _GPIOB
1038 #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
1039 #endif /*_GPIOB */
1040
1041 #ifdef _GPIOC
1042 #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
1043 #endif /*_GPIOC */
1044
1045 #ifdef _GPIOD
1046 #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
1047 #endif /*_GPIOD */
1048
1049 #ifdef _GPIOE
1050 #define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
1051 #endif /*_GPIOE */
1052
1053 #ifdef _ADC1
1054 #define ADC1 ((ADC_TypeDef *) ADC1_BASE)
1055 #endif /*_ADC1 */
1056
1057 #ifdef _ADC2
1058 #define ADC2 ((ADC_TypeDef *) ADC2_BASE)
1059 #endif /*_ADC2 */
1060
1061 #ifdef _TIM1
1062 #define TIM1 ((TIM1_TypeDef *) TIM1_BASE)
1063 #endif /*_TIM1 */
1064
1065 #ifdef _SPI1
1066 #define SPI1 ((SPI_TypeDef *) SPI1_BASE)
1067 #endif /*_SPI1 */
1068
1069 #ifdef _USART1
1070 #define USART1 ((USART_TypeDef *) USART1_BASE)
1071 #endif /*_USART1 */
1072
1073 #ifdef _DMA
1074 #define DMA ((DMA_TypeDef *) DMA_BASE)
1075 #endif /*_DMA */
1076
1077 #ifdef _DMA_Channel1
1078 #define DMA_Channel1 ((DMA_Channel_TypeDef *) DMA_Channel1_BASE)
1079 #endif /*_DMA_Channel1 */
1080
1081 #ifdef _DMA_Channel2
1082 #define DMA_Channel2 ((DMA_Channel_TypeDef *) DMA_Channel2_BASE)
1083 #endif /*_DMA_Channel2 */
1084
1085 #ifdef _DMA_Channel3
1086 #define DMA_Channel3 ((DMA_Channel_TypeDef *) DMA_Channel3_BASE)
1087 #endif /*_DMA_Channel3 */
1088
1089 #ifdef _DMA_Channel4
1090 #define DMA_Channel4 ((DMA_Channel_TypeDef *) DMA_Channel4_BASE)
1091 #endif /*_DMA_Channel4 */
1092
1093 #ifdef _DMA_Channel5
1094 #define DMA_Channel5 ((DMA_Channel_TypeDef *) DMA_Channel5_BASE)
1095 #endif /*_DMA_Channel5 */
1096
1097 #ifdef _DMA_Channel6
1098 #define DMA_Channel6 ((DMA_Channel_TypeDef *) DMA_Channel6_BASE)
1099 #endif /*_DMA_Channel6 */
1100
1101 #ifdef _DMA_Channel7
1102 #define DMA_Channel7 ((DMA_Channel_TypeDef *) DMA_Channel7_BASE)
1103 #endif /*_DMA_Channel7 */
1104
1105 #ifdef _FLASH
1106 #define FLASH ((FLASH_TypeDef *) FLASH_BASE)
1107 #define OB ((OB_TypeDef *) OB_BASE)
1108 #endif /*_FLASH */
1109
1110 #ifdef _RCC
1111 #define RCC ((RCC_TypeDef *) RCC_BASE)
1112 #endif /*_RCC */
1113
1114 #ifdef _SysTick
1115 #define SysTick ((SysTick_TypeDef *) SysTick_BASE)
1116 #endif /*_SysTick */
1117
1118 #ifdef _NVIC
1119 #define NVIC ((NVIC_TypeDef *) NVIC_BASE)
1120 #define SCB ((SCB_TypeDef *) SCB_BASE)
1121 #endif /*_NVIC */
1122
1123 /*------------------------ Debug Mode ----------------------------------------*/
1124 #else /* DEBUG */
1125 #ifdef _TIM2
1126 EXT TIM_TypeDef *TIM2;
1127 #endif /*_TIM2 */
1128
1129 #ifdef _TIM3
1130 EXT TIM_TypeDef *TIM3;
1131 #endif /*_TIM3 */
1132
1133 #ifdef _TIM4
1134 EXT TIM_TypeDef *TIM4;
1135 #endif /*_TIM4 */
1136
1137 #ifdef _RTC
1138 EXT RTC_TypeDef *RTC;
1139 #endif /*_RTC */
1140
1141 #ifdef _WWDG
1142 EXT WWDG_TypeDef *WWDG;
1143 #endif /*_WWDG */
1144
1145 #ifdef _IWDG
1146 EXT IWDG_TypeDef *IWDG;
1147 #endif /*_IWDG */
1148
1149 #ifdef _SPI2
1150 EXT SPI_TypeDef *SPI2;
1151 #endif /*_SPI2 */
1152
1153 #ifdef _USART2
1154 EXT USART_TypeDef *USART2;
1155 #endif /*_USART2 */
1156
1157 #ifdef _USART3
1158 EXT USART_TypeDef *USART3;
1159 #endif /*_USART3 */
1160
1161 #ifdef _I2C1
1162 EXT I2C_TypeDef *I2C1;
1163 #endif /*_I2C1 */
1164
1165 #ifdef _I2C2
1166 EXT I2C_TypeDef *I2C2;
1167 #endif /*_I2C2 */
1168
1169 #ifdef _CAN
1170 EXT CAN_TypeDef *CAN;
1171 #endif /*_CAN */
1172
1173 #ifdef _BKP
1174 EXT BKP_TypeDef *BKP;
1175 #endif /*_BKP */
1176
1177 #ifdef _PWR
1178 EXT PWR_TypeDef *PWR;
1179 #endif /*_PWR */
1180
1181 #ifdef _AFIO
1182 EXT AFIO_TypeDef *AFIO;
1183 #endif /*_AFIO */
1184
1185 #ifdef _EXTI
1186 EXT EXTI_TypeDef *EXTI;
1187 #endif /*_EXTI */
1188
1189 #ifdef _GPIOA
1190 EXT GPIO_TypeDef *GPIOA;
1191 #endif /*_GPIOA */
1192
1193 #ifdef _GPIOB
1194 EXT GPIO_TypeDef *GPIOB;
1195 #endif /*_GPIOB */
1196
1197 #ifdef _GPIOC
1198 EXT GPIO_TypeDef *GPIOC;
1199 #endif /*_GPIOC */
1200
1201 #ifdef _GPIOD
1202 EXT GPIO_TypeDef *GPIOD;
1203 #endif /*_GPIOD */
1204
1205 #ifdef _GPIOE
1206 EXT GPIO_TypeDef *GPIOE;
1207 #endif /*_GPIOE */
1208
1209 #ifdef _ADC1
1210 EXT ADC_TypeDef *ADC1;
1211 #endif /*_ADC1 */
1212
1213 #ifdef _ADC2
1214 EXT ADC_TypeDef *ADC2;
1215 #endif /*_ADC2 */
1216
1217 #ifdef _TIM1
1218 EXT TIM1_TypeDef *TIM1;
1219 #endif /*_TIM1 */
1220
1221 #ifdef _SPI1
1222 EXT SPI_TypeDef *SPI1;
1223 #endif /*_SPI1 */
1224
1225 #ifdef _USART1
1226 EXT USART_TypeDef *USART1;
1227 #endif /*_USART1 */
1228
1229 #ifdef _DMA
1230 EXT DMA_TypeDef *DMA;
1231 #endif /*_DMA */
1232
1233 #ifdef _DMA_Channel1
1234 EXT DMA_Channel_TypeDef *DMA_Channel1;
1235 #endif /*_DMA_Channel1 */
1236
1237 #ifdef _DMA_Channel2
1238 EXT DMA_Channel_TypeDef *DMA_Channel2;
1239 #endif /*_DMA_Channel2 */
1240
1241 #ifdef _DMA_Channel3
1242 EXT DMA_Channel_TypeDef *DMA_Channel3;
1243 #endif /*_DMA_Channel3 */
1244
1245 #ifdef _DMA_Channel4
1246 EXT DMA_Channel_TypeDef *DMA_Channel4;
1247 #endif /*_DMA_Channel4 */
1248
1249 #ifdef _DMA_Channel5
1250 EXT DMA_Channel_TypeDef *DMA_Channel5;
1251 #endif /*_DMA_Channel5 */
1252
1253 #ifdef _DMA_Channel6
1254 EXT DMA_Channel_TypeDef *DMA_Channel6;
1255 #endif /*_DMA_Channel6 */
1256
1257 #ifdef _DMA_Channel7
1258 EXT DMA_Channel_TypeDef *DMA_Channel7;
1259 #endif /*_DMA_Channel7 */
1260
1261 #ifdef _FLASH
1262 EXT FLASH_TypeDef *FLASH;
1263 EXT OB_TypeDef *OB;
1264 #endif /*_FLASH */
1265
1266 #ifdef _RCC
1267 EXT RCC_TypeDef *RCC;
1268 #endif /*_RCC */
1269
1270 #ifdef _SysTick
1271 EXT SysTick_TypeDef *SysTick;
1272 #endif /*_SysTick */
1273
1274 #ifdef _NVIC
1275 EXT NVIC_TypeDef *NVIC;
1276 EXT SCB_TypeDef *SCB;
1277 #endif /*_NVIC */
1278
1279 #endif /* DEBUG */
1280
1281 /*在stm32f10x_conf.h上右击鼠标,open “stm32f10x_conf.h”,打开stm32f10x_conf.h文件。
1282 stm32f10x_conf.h文件是项目配置头文件,该头文件设置了所有用到的外设,没有用到的外设可以将其屏蔽掉,以节省编译时间。
1283 提示:如果修改不了stm32f10x_conf.h文件时,是因为该文件是只读属性,在属性中修改即可。
1284
1285 注意到main函数中有*/
1286 #ifdef DEBUG
1287 debug();
1288 #endif
1289 /*这段代码,那么DEBUG标示符是在哪定义的呢?是在stm32f10x_conf.h中定义的。
1290 还有,单片机的外部高速晶振HSE,不同的开发板可以有不同的值。那么HSE的值是在哪定义的呢?还是在stm32f10x_conf.h中。*/
1291 /* Includes ------------------------------------------------------------------*/
1292 #include "stm32f10x_type.h"
1293
1294 /* Exported types ------------------------------------------------------------*/
1295 /* Exported constants --------------------------------------------------------*/
1296 /* Uncomment the line below to compile the library in DEBUG mode, this will expanse
1297 the "assert_param" macro in the firmware library code (see "Exported macro"
1298 section below) */
1299 /* #define DEBUG 1 */
1300
1301 /* Comment the line below to disable the specific peripheral inclusion */
1302 /************************************* ADC ************************************/
1303 //#define _ADC
1304 //#define _ADC1
1305 //#define _ADC2
1306
1307 /************************************* BKP ************************************/
1308 //#define _BKP
1309
1310 /************************************* CAN ************************************/
1311 //#define _CAN
1312
1313 /************************************* DMA ************************************/
1314 //#define _DMA
1315 //#define _DMA_Channel1
1316 //#define _DMA_Channel2
1317 //#define _DMA_Channel3
1318 //#define _DMA_Channel4
1319 //#define _DMA_Channel5
1320 //#define _DMA_Channel6
1321 //#define _DMA_Channel7
1322
1323 /************************************* EXTI ***********************************/
1324 //#define _EXTI
1325
1326 /************************************* FLASH and Option Bytes *****************/
1327 #define _FLASH
1328 /* Uncomment the line below to enable FLASH program/erase/protections functions,
1329 otherwise only FLASH configuration (latency, prefetch, half cycle) functions
1330 are enabled */
1331 /* #define _FLASH_PROG */
1332
1333 /************************************* GPIO ***********************************/
1334 #define _GPIO
1335 //#define _GPIOA
1336 //#define _GPIOB
1337 //#define _GPIOC
1338 //#define _GPIOD
1339 //#define _GPIOE
1340 #define _AFIO
1341
1342 /************************************* I2C ************************************/
1343 //#define _I2C
1344 //#define _I2C1
1345 //#define _I2C2
1346
1347 /************************************* IWDG ***********************************/
1348 //#define _IWDG
1349
1350 /************************************* NVIC ***********************************/
1351 #define _NVIC
1352
1353 /************************************* PWR ************************************/
1354 //#define _PWR
1355
1356 /************************************* RCC ************************************/
1357 #define _RCC
1358
1359 /************************************* RTC ************************************/
1360 //#define _RTC
1361
1362 /************************************* SPI ************************************/
1363 //#define _SPI
1364 //#define _SPI1
1365 //#define _SPI2
1366
1367 /************************************* SysTick ********************************/
1368 //#define _SysTick
1369
1370 /************************************* TIM1 ***********************************/
1371 //#define _TIM1
1372
1373 /************************************* TIM ************************************/
1374 //#define _TIM
1375 //#define _TIM2
1376 //#define _TIM3
1377 //#define _TIM4
1378
1379 /************************************* USART **********************************/
1380 //#define _USART
1381 //#define _USART1
1382 //#define _USART2
1383 //#define _USART3
1384
1385 /************************************* WWDG ***********************************/
1386 //#define _WWDG
1387
1388 /* In the following line adjust the value of External High Speed oscillator (HSE)
1389 used in your application */
1390 #define HSE_Value ((u32)8000000) /* Value of the External oscillator in Hz*/
1391
1392 /* Exported macro ------------------------------------------------------------*/
1393 #ifdef DEBUG
1394 /*******************************************************************************
1395 * Macro Name : assert_param
1396 * Description : The assert_param macro is used for function's parameters check.
1397 * It is used only if the library is compiled in DEBUG mode.
1398 * Input : - expr: If expr is false, it calls assert_failed function
1399 * which reports the name of the source file and the source
1400 * line number of the call that failed.
1401 * If expr is true, it returns no value.
1402 * Return : None
1403 *******************************************************************************/
1404 #define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__))
1405 /* Exported functions ------------------------------------------------------- */
1406 void assert_failed(u8* file, u32 line);
1407 #else
1408 #define assert_param(expr) ((void)0)
1409 #endif /* DEBUG */
1410 /*在stm32f10x_type.h上右击鼠标,open “stm32f10x_type.h”,打开stm32f10x_type.h文件。
1411 stm32f10x_type.h文件包含所有其他文件所使用的数据和枚举类型。/*
1412 /* Includes ------------------------------------------------------------------*/
1413 /* Exported types ------------------------------------------------------------*/
1414 typedef signed long s32;
1415 typedef signed short s16;
1416 typedef signed char s8;
1417
1418 typedef signed long const sc32; /* Read Only */
1419 typedef signed short const sc16; /* Read Only */
1420 typedef signed char const sc8; /* Read Only */
1421
1422 typedef volatile signed long vs32;
1423 typedef volatile signed short vs16;
1424 typedef volatile signed char vs8;
1425
1426 typedef volatile signed long const vsc32; /* Read Only */
1427 typedef volatile signed short const vsc16; /* Read Only */
1428 typedef volatile signed char const vsc8; /* Read Only */
1429
1430 typedef unsigned long u32;
1431 typedef unsigned short u16;
1432 typedef unsigned char u8;
1433
1434 typedef unsigned long const uc32; /* Read Only */
1435 typedef unsigned short const uc16; /* Read Only */
1436 typedef unsigned char const uc8; /* Read Only */
1437
1438 typedef volatile unsigned long vu32;
1439 typedef volatile unsigned short vu16;
1440 typedef volatile unsigned char vu8;
1441
1442 typedef volatile unsigned long const vuc32; /* Read Only */
1443 typedef volatile unsigned short const vuc16; /* Read Only */
1444 typedef volatile unsigned char const vuc8; /* Read Only */
1445
1446 typedef enum {FALSE = 0, TRUE = !FALSE} bool;
1447 typedef bool BOOL;
1448
1449 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
1450
1451 typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
1452 #define IS_FUNCTIONAL_STATE(STATE) ((STATE == DISABLE) || (STATE == ENABLE))
1453
1454 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
1455
1456 #ifndef NULL
1457 #define NULL ((void *)0)
1458 #endif
1459
1460 #define U8_MAX ((u8)255)
1461 #define S8_MAX ((s8)127)
1462 #define S8_MIN ((s8)-128)
1463 #define U16_MAX ((u16)65535u)
1464 #define S16_MAX ((s16)32767)
1465 #define S16_MIN ((s16)-32768)
1466 #define U32_MAX ((u32)4294967295uL)
1467 #define S32_MAX ((s32)2147483647)
1468 #define S32_MIN ((s32)2147483648uL)
1469
1470 /* Exported constants --------------------------------------------------------*/
1471 /* Exported macro ------------------------------------------------------------*/
1472 /* Exported functions ------------------------------------------------------- */
1473
1474 #endif /* __STM32F10x_TYPE_H */
1475
1476 /*在stm32f10x_map.h文件中,在stm32f10x_macro.h上右击鼠标,open “stm32f10x_macro.h”,打开stm32f10x_macro.h文件。
1477 stm32f10x_macro.h是cortex3_macro.s对应的头文件(即操作Cortex_M3核所需的头文件)*/
1478
1479 /* Define to prevent recursive inclusion -------------------------------------*/
1480 #ifndef __CORTEXM3_MACRO_H
1481 #define __CORTEXM3_MACRO_H
1482
1483 /* Includes ------------------------------------------------------------------*/
1484 #include "stm32f10x_type.h"
1485
1486 /* Exported types ------------------------------------------------------------*/
1487 /* Exported constants --------------------------------------------------------*/
1488 /* Exported macro ------------------------------------------------------------*/
1489 /* Exported functions ------------------------------------------------------- */
1490 void __WFI(void);
1491 void __WFE(void);
1492 void __SEV(void);
1493 void __ISB(void);
1494 void __DSB(void);
1495 void __DMB(void);
1496 void __SVC(void);
1497 u32 __MRS_CONTROL(void);
1498 void __MSR_CONTROL(u32 Control);
1499 u32 __MRS_PSP(void);
1500 void __MSR_PSP(u32 TopOfProcessStack);
1501 u32 __MRS_MSP(void);
1502 void __MSR_MSP(u32 TopOfMainStack);
1503 void __SETPRIMASK(void);
1504 void __RESETPRIMASK(void);
1505 void __SETFAULTMASK(void);
1506 void __RESETFAULTMASK(void);
1507 void __BASEPRICONFIG(u32 NewPriority);
1508 u32 __GetBASEPRI(void);
1509 u16 __REV_HalfWord(u16 Data);
1510 u32 __REV_Word(u32 Data);
1511
1512 #endif /* __CORTEXM3_MACRO_H */