STM32的寄存器操作

STM32的寄存器操作
在使用STM32单片机编程时一般都用ST给的库函数编程,库函数编程的底层就是对单片机寄存器的操作,库函数就是一系列寄存器操作的封装。一般来说ST给的库函数足以满足项目所需的各种操作。但是如果没有找到能满足你需求的库函数,或者你需要操作的寄存器比较少那么使用直接操作寄存器的方法往往更加简洁。
下面是操作寄存器的方法
1.每个寄存器都有一个地址,这个地址是寄存器软件层面的映射,具有相互对应的关系,如:

#define DAC_Trigger_T2_TRGO                ((uint32_t)0x00000024) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T4_TRGO                ((uint32_t)0x0000002C) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T5_TRGO                ((uint32_t)0x0000001C) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T6_TRGO                ((uint32_t)0x00000004) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T7_TRGO                ((uint32_t)0x00000014) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T8_TRGO                ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel */ 

2.注意数据类型,一般库文件里的寄存器地址都是无符号类型的数据,这里的寄存器地址只是一个常数,那么如何通过这个寄存器地址来操作寄存器呢?711实验室的学弟学妹们你们都学过C语言了可以自己想一想

3.没错就是通过C语言中的指针来进行操作

#define GPIOH_MODER				*(unsigned int*)(GPIOH_BASE+0x00)
#define GPIOH_OTYPER			*(unsigned int*)(GPIOH_BASE+0x04)
#define GPIOH_OSPEEDR			*(unsigned int*)(GPIOH_BASE+0x08)
#define GPIOH_PUPDR				*(unsigned int*)(GPIOH_BASE+0x0C)

首先(unsigned int*)将地址常量转化为一个指针
然后通过*操作指针来进行赋值。
4.实际应用

/*GPIOH MODER10清空*/
	GPIOH_MODER  &= ~( 0x03<< (2*10));	
	/*PH10 MODER10 = 01b 输出模式*/
	GPIOH_MODER |= (1<<2*10);
	
	/*GPIOH OTYPER10清空*/
	GPIOH_OTYPER &= ~(1<<1*10);
	/*PH10 OTYPER10 = 0b 推挽模式*/
	GPIOH_OTYPER |= (0<<1*10);

你可能感兴趣的:(笔记,单片机,stm32,嵌入式,c语言,寄存器)