标签:
上文主要描写了如何新建一个工程,那么下面就开始了stm32芯片的学习之旅,像c/c++中经典的入门代码"hello world"一样,stm32入门程序流水灯绝对也是经典,如果你已经有了一定的C语言基础以及对51芯片有一定了解,那么学习起来绝对事半功备,当然没有也不需要担心,本程序代码量很少,实现起来很简单。不过学习stm32,第一点就是要转变思路,从现在开始你不在是仅仅和编程语言打交道了,交叉编译的方式注定嵌入式软硬件不分家,必要的硬件知识也是必须的(本博客中所有程序都是在stm32f107芯片,基于stm提供的芯片固件库实现的,其它芯片需要自行修改,以后就不在赘述)。
当然现在只是刚开始,硬件需求低,只要知道外设选择的端口就可以了,如本例:
根据上面原理图。就能得出信息LED对应端口PD2,PD3,PD4,PD7,外部上拉电阻,低电平点亮
用过51的应该都知道,我们只要将对应的I/O设置为1,0即可,不过STM32直接设置是不行的,这是因为STM32的每个管脚都可以有8中模式:
模拟输入 用于模拟量的输入,或者低功耗下省电。
下拉输入 端口内下拉电阻电路导通。默认为低电平,外部高电平动作。
上拉输入 端口内上拉电阻电路导通,默认为高电平,外部低电平动作。
浮空输入 端口内上下MOSFET均不导通,高阻态,输入状态仅由端口决定。
开漏输出 端口输出为0时内部下拉电阻电路接地,输出1时端口相当于悬空,即默认只能输出0,如果外部需要输出1,需要外接上拉电阻电路。
推挽输出 端口输出为0时内部下拉电阻电路接地,输出1时内部接上拉电阻电路,默认输出为0。
复用开漏输出 内部设置同开漏,但被其他外设复用。
复用推挽输出 内部设置同推挽,但被其他外设复用。
从上面可以得出,想要实现流水灯,GPIO口的配置就是推挽输出,且低电平点亮
了解了这些之后,对于简单的流水灯就知道如何做了
第一步:配置外设,如流水灯,就是配置上述4个端口
第二步:设置/复位端口
第三步:流水灯逻辑实现
熟悉下stm32f10x固件函数库的说明书,就可以开始写程序了。
个人建议常见的外设配置可以封装到同一个文件里,这样便于以后的修改和移植(见文件Lightwater中stm32f10x_user.c和stm32f10x_user.h)文件
配置代码如下:
void LED_UserConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义必须在所有运行代码之前,c语言机制问题
/*使能外设区域时钟*/
RCC_APB2PeriphClockCmd(RCC_LED_GPIO, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_LED_ALL; //选择LED输出的端口,可根据实际需要配置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设定GPIO最大输出频率
GPIO_Init(GPIO_LED, &GPIO_InitStructure);
}
使能外设区域时钟对于所有外设都是必须的,且要先于初始化,要牢记,具体我会单独把stm32的时钟拿出来讲,但这里要注意点:
时钟使能要在寄存器配置之前,这是因为stm32的寄存器配置也是依靠时钟脉冲才能够处理的。
GPIO_Mode_Out_PP即固件函数库中对应推挽输出
GPIO_Speed_50MHz设定的意义不大,主要用于限制输入的,与本例无关。
如上,就完成外设初始化,接下来就可以像51那样操作LED了,实现代码:
void LED_Control(u8 LED_Number) { GPIO_SetBits(GPIO_LED,GPIO_LED_ALL);//关闭所有LED switch(LED_Number) { case 0: GPIO_ResetBits(GPIO_LED,GPIO_LED_1);//LED1点亮 break; case 1: GPIO_ResetBits(GPIO_LED,GPIO_LED_2); break; case 2: GPIO_ResetBits(GPIO_LED,GPIO_LED_3); break; case 3: GPIO_ResetBits(GPIO_LED,GPIO_LED_4); break; default: GPIO_SetBits(GPIO_LED,GPIO_LED_ALL); break; } }
如上述代码,就实现了LED1点亮->LED1灭->LED2亮->......的循环过程,完整代码可参考文件1-1,希望对入门stm32学习有帮助!
标签:
原文地址:http://www.cnblogs.com/zc110747/p/4654782.html