首先感谢河北科技大学航模协会-能给我这样的学习机会-感谢那些带我们教我们的学长学姐们.
点亮第一个led灯之前要先大概了解一下单片机的工作方式并且有一定的编程基础,能看懂程序
单片机上有很多引脚,被称作io口,io口是通过总线(信号传输的通路)与内部处理系统(执行程序的硬件的总称)相连接,内部处理系统执行c语言程序可以直接控制io口,硬件机器只能识别机器码,但是已经有人一层一层的从底层封装,封装好了stm32 c语言库函数.因此,我们只需调用库函数即可.
点亮第一个io口的核心问题就是io口的配置(初始化)
void GPIOC13(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
上面是一个初始化c13口的例子,在stm32库函数中,由于实现每个功能(配置每个功能)都需要很多参数,因此库函数中用结构体的方式,把每个参数放到结构体成员中,再通过一个函数将结构变量的指针传入调用该函数就可以实现初始化.
比如上面初始化c13口的例子"GPIO_InitTypeDef"是一个结构体这里定义了一个名字为"GPIO_InitStructure"的结构体变量RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);这句是使能(打开0)apb2总线的时钟,不是结构体内容,io口工作必须打开这个时钟从
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;这行开始给结构体成员赋值,这个成员是引脚代号这里是13,
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;这个成员是总线时钟速度,这里是50mhz(设置了这个io口输出信号的速率)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;这个成员是输出模式,现在是推挽模
stm32的io口几种模式这里有一篇讲解http://blog.csdn.net/lq18811566072/article/details/51585743
1.推挽输出,输出能力强,开关速度快,数字信号输出.
2.开漏输出,利用外部电路驱动
3.浮空输入,io口的电平是悬空的,不确定的,完全由外部输入决定.
4.上拉下拉模拟输入,上拉为io口高电平,下拉为io口低电平,模拟输入为模拟量输入.
5.复用开漏输出,复用推挽输出,io被用作第二种用途.
配置好这个结构体后,调用GPIO_Init(GPIOC, &GPIO_InitStructure);io初始化函数参数1是gpiox,stm32中io口以字母和数字标号,第二个参数为结构体变量的地址.
最后在入口函数(main函数)中调用该初始化函数即可完成io的初始化.
GPIO_ResetBits(GPIO,GPIO_Pin_13);GPIO_SetBits(GPIOB,GPIO_Pin_13);
推挽模式下这两个函数控制io高低电平.
声明:转载请注明出处,本人入门级菜鸟,内容大多学习于网络,存在问题太多不一一列举,
大佬多多指教.本人QQ941131649