5.小白初学日记 STM32F429 用寄存器点亮LED灯例程代码分析

好了朋友们,又是新的一天,今天你学会了吗?哈哈
好了话不多说,让我们直接上干货!
下面这些都是例程。

int main(void)
{	
	/*开启 GPIOH 时钟,使用外设时都要先开启它的时钟*/
	RCC_AHB1ENR |= (1<<7);	
	
	/* LED 端口初始化 */
	
	/*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);
	
	/*GPIOH OSPEEDR10清空*/
	GPIOH_OSPEEDR &= ~(0x03<<2*10);
	/*PH10 OSPEEDR10 = 0b 速率2MHz*/
	GPIOH_OSPEEDR |= (0<<2*10);
	
	/*GPIOH PUPDR10清空*/
	GPIOH_PUPDR &= ~(0x03<<2*10);
	/*PH10 PUPDR10 = 01b 上拉模式*/
	GPIOH_PUPDR |= (1<<2*10);
	
	/*PH10 BSRR寄存器的 BR10置1,使引脚输出低电平*/
	GPIOH_BSRR |= (1<<16<<10);
	
	/*PH10 BSRR寄存器的 BS10置1,使引脚输出高电平*/
	//GPIOH_BSRR |= (1<<10);

	while(1);
}

这里是stm32f4xx.h


/*片上外设基地址  */
#define PERIPH_BASE           ((unsigned int)0x40000000)                          

/*总线基地址 */
#define AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000)	

/*GPIO外设基地址*/
#define GPIOH_BASE            (AHB1PERIPH_BASE + 0x1C00)


/* GPIOH寄存器地址,强制转换成指针 */
#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)
#define GPIOH_IDR					*(unsigned int*)(GPIOH_BASE+0x10)
#define GPIOH_ODR					*(unsigned int*)(GPIOH_BASE+0x14)
#define GPIOH_BSRR					*(unsigned int*)(GPIOH_BASE+0x18)
#define GPIOH_LCKR					*(unsigned int*)(GPIOH_BASE+0x1C)
#define GPIOH_AFRL					*(unsigned int*)(GPIOH_BASE+0x20)
#define GPIOH_AFRH					*(unsigned int*)(GPIOH_BASE+0x24)

/*RCC外设基地址*/
#define RCC_BASE              (AHB1PERIPH_BASE + 0x3800)

/*RCC的AHB1时钟使能寄存器地址,强制转换成指针*/
#define RCC_AHB1ENR				*(unsigned int*)(RCC_BASE+0x30)

好,程序列出来了,我们一步一步的分析。
/GPIOH MODER10清空/
GPIOH_MODER &= ~( 0x03<< (2*10));
这一步有同学会问了。为啥是0x03呀
0x03就是二进制的11. 当然了以后看见&=~就是清零的意思就好了。
但是深入追究一下。刚才做了软件仿真,所以00没有用。
自己理解的更深入了。0x03就是11 11左移20位就是Moder10的位置。让这两个数清零即可。其余是一样的。
还有这里的输入。
上拉输入是输出啥是啥。
上拉输出是高电平。

谨记谨记谨记!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个项目通过STM32F429开发板设计的小型示波器,示波器实现的功能: Analog-Kanäle : 2 (per ADC1 und ADC2) ADC-Mode : Dual regular simultaneous mode (ADC1+2 werden gleichzeitig gemessen) DMA-Mode : Double-Buffer-Mode (zwei Buffer die alternierend beschrieben werden) Navigations-Steuerkreuz : per Touch (Halbtransparent) Steuerkreuz an 3 Positionen vom Display einblendbar und abschaltbar. Trigger-Quelle : CH1 oder CH2 Trigger-Flanke : Hi- oder Lo-Flanke Trigger-Mode : “normal” , “auto” , “single” Trigger-Value : 0,0V bis 3,0V Triggerposition : fix bei Display Mitte “Run/Stop” Button zum stoppen der Aufzeichnung (per Hardware User-Button) Timebase : einstellbar von 5sec/div bis 25us/div (max = 1MHz Samplerate) CH1 : einstellbar von 5V/div bis 0,1V/div (an Pin PA5 [0...3V]) CH2 : einstellbar von 5V/div bis 0,1V/div (an Pin PA7 [0...3V]) CH1+CH2 : ein/ausblendbar + Y-Position verschiebbar Cursor : Off, CH1, CH2, Time oder FFT FFT : von CH1 oder CH2 (abschaltbar) ADC und FFT-Daten können per UART an einen PC gesendet werden Der Oszi-Screen kann als BMP-File per UART zum PC gesendet werden UART Setting : 115200 Baud / 8N1 500 Hz Testsignal (Rechteck) 源码得用CooCox来Build 不想compiler的, 也可以直接烧录这原码包內的bin档 \Show_10_Oszi\stm32f429\Debug\bin\stm32f429.bin 这是正面, 有兩個Channel 这是背面(PA5是CH1, PA7是CH2) 这是菜单(触摸屏) 电路城语:此资料为卖家免费分享,不提供技术支持,请大家使用前验证资料的正确性!如涉及版权问题,请联系管理员删除! 附件包含以下资料:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值