完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在这学习stm32半年的时间中,虽然明显的感觉到自己在进步,但是还是发现学习方法的错误。由于急功近利的性格,在学习stm32之初,我选择了最简单的办法,用库函数来写程序,而且也由于我这急功近利的性格,我也根本没有仔细看stm32芯片的资料,就照着视频却看,然后对着例程去写。刚开始这也让我学习了许多,随着时间的流逝,在知道更多关于嵌入式的知识后,我也不满足现状了,想学习liunx,这就要学习可以上系统的芯片了,发现都是没有库函数的,这就让我发现了许多以前没有发现的问题。这些偷懒的行为严重限制了以后的发展,当然不想学习更高级知识的人例外。但是我相信没有人能满足现状。学习嵌入式的,都是有野心的。
所以现在开始重新开始学习stm32,当然不是用库函数了,而是用寄存器慢慢去写,这样我相信可以学的更多,为以后学其他高级的芯片也打下坚实的基础。。。 按键控制LED灯 #ifndef __LED_H #define __LED_H typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; #define KEY0 1 #define KEY1 2 #define WK_UP 3 #define MYGPIOA_BASE ((volatile unsigned int*) 0x40010800) #define MYGPIOB_BASE ((volatile unsigned int*) 0x40010C00) //GPIOB基地址 #define MYGPIOE_BASE ((volatile unsigned int*) 0x40011800) //GPIOE基地址 #define MYRCC_BASE ((volatile unsigned int*) 0x40021000) //RCC基地址 typedef struct { volatile unsigned int CRL; volatile unsigned int CRH; volatile unsigned int IDR; volatile unsigned int ODR; volatile unsigned int BSRR; volatile unsigned int BRR; volatile unsigned int LCKR; }GPIO_TYPE; typedef struct { volatile unsigned int CR; volatile unsigned int CFGR; volatile unsigned int GIR; volatile unsigned int APB2RSTR; volatile unsigned int APB1RSTR; volatile unsigned int AHNENR; volatile unsigned int APB2ENR; volatile unsigned int APB1ENR; volatile unsigned int BDCR; volatile unsigned int CSR; volatile unsigned int AHBRSTR; volatile unsigned int CFGR2; }RCC_TYPE; #define MYRCC ((RCC_TYPE*)MYRCC_BASE) #define MYGPIOA ((GPIO_TYPE*)MYGPIOA_BASE) #define MYGPIOB ((GPIO_TYPE*)MYGPIOB_BASE) #define MYGPIOE ((GPIO_TYPE*)MYGPIOE_BASE) void LED_Init(void);//初始化 void KEY_Init(void); u8 KEY_Scan(void); #endif #include “led.h” void KEY_Init() { MYRCC-》APB2ENR |= (1《《2)|(1《《6); MYGPIOA-》CRL &= 0xfffffff0; MYGPIOA-》CRL |= 0x00000008; //默认下拉 MYGPIOE-》CRL &= 0xfff00fff; MYGPIOE-》CRL |= 0x00088000; MYGPIOE-》ODR |= (1《《3)|(1《《4); //必须要设置成上拉,否则按键不灵敏,时灵时不灵 } // u8 KEY_Scan() { u8 key; u16 GPIOA_DATA; u16 GPIOE_DATA; GPIOA_DATA = MYGPIOA-》IDR ; GPIOE_DATA = MYGPIOE-》IDR ; if((GPIOA_DATA &0x0001)||(!(GPIOE_DATA & 0x0010))||!(GPIOE_DATA & 0x0008)) { if (GPIOA_DATA &0x0001) key = WK_UP ; if (!(GPIOE_DATA & 0x0010)) key = KEY0 ; if (!(GPIOE_DATA & 0x0008)) key = KEY1 ; } else key = 0; return key; } // void LED_Init() { MYRCC-》APB2ENR &= ~(1《《3)&~(1《《6); MYRCC-》APB2ENR |= (1《《3)|(1《《6); MYGPIOB-》CRL &= 0xff0fffff; MYGPIOB-》CRL |= 0x00300000; MYGPIOE-》CRL &= 0xff0fffff; MYGPIOE-》CRL |= 0x00300000; MYGPIOB-》ODR |= 1《《5; MYGPIOE-》ODR |= 1《《5; } int main(void) { u8 key; LED_Init(); KEY_Init(); while(1) { key = KEY_Scan(); switch (key) { case KEY0: MYGPIOB-》ODR &= ~(1《《5); break ; case KEY1: MYGPIOE-》ODR &= ~(1《《5); break ; case WK_UP : MYGPIOB-》ODR |= (1《《5); MYGPIOE-》ODR |= (1《《5); break ; } } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1621 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1546 浏览 1 评论
980 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
686 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1599 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
536浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 07:25 , Processed in 0.769177 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号