本帖最后由 lcmbeyond04 于 2013-11-5 22:12 编辑
点亮LED其实是很简单的一些程序,当你看到其他人的程序的时候,你有思考过怎样改得更好吗?有思考过怎样更方便于增加多种变化吗?如果单纯的led_on;delay();
led_off;
就能满足你的要求,这样真的要好好反省一下自己,作为初学者,不懂并不可怕,但不思考,那是致命的。你看到程序的时候,你有想过怎样改得更方便吗?你有想过怎样写得更好吗?
我的程序也是看着网上其他的教程,然后进行了加工,站着巨人的肩膀上学习,进步才会更快,当然收入就..呵呵
这些程序除了给大家学习学习,还希望大家能指出一些缺点,让我知道一下自己的不足。附近的PDF是教大家怎样建立一个
STM32工程,也是我程序参考的。输出的HEX在文件夹output-obj里面。
授之以鱼不如授之以鱼,留几个问题给大家思考:
1,GPIO的开漏输出和推挽输出有什么区别?大致结构是如何的?下面是部分程序,能不能改成推挽输出?
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIO时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; //使能LED对应的GPIO
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
2,关于建立工程,默认是72MHz,这是因为外部晶振是因为8MHz的,如果换成是12MHz的,发生什么问题?或者说我要把72MHz改成36MHz的系统频率,怎么改?(高频率不用用低的,这个问题比较脑残)
3,在main.h(如下)中,能不能把变量和数组都剪切去led.h?尝试一下,收获匪浅哦
#ifndef _main_h_
#define _main_h_
uint8_t kindOfLed;
uint8_t ledState_a[KIND_OF_LED]={led0,led0,led1,led12,led123,led23,
led3,led0,led0,led0,led0,led3,led23,
led123,led12,led1,led0,led0,0xff};
#endif
4,初始化我用了库函数,为什么主程序却去操作寄存器?(明白这个,面试跟面试官这样说出理由,他会觉得你真的懂stm32了哦^ ^)
5,main.h能不能包含在myheader.h中?(myheader.h包含了各种xx.c的头文件)
其实这些都是我初学stm32遇到的问题(其实就是前几天),因为我有学过cortex-M3的其他
单片机,而且是从寄存器学起的,所以有一定基础。
作为初学者,一定要多思考。其实上面的问题有个别我只是解决了而已,只能是靠一些现象分析猜测,毕竟资历尚浅。
2