本帖最后由 ForestLi 于 2017-11-3 13:41 编辑
刚接触STM32
跑马灯实验
(1)首先先了解关于IO的原理和7个配置寄存器;主要是
CRH、CRL:这两个寄存器一模一样,唯一的区别就是一个是高位一个是低位;
一CRL为例: 每个CRL中都有4位一个单位,包括一个MODE选择输出还是输出模式(输出模式具有三种不同的速度)和CNF选择具体的输入(输出)模式
IDR、ODR:这两个是IO状态寄存器;IDR是一个只用了低16位的只读寄存器,用来读取对应IO的电平状态。ODR也是只用了低16位得可读写的寄存器,用来控制对应的IO的输出和读取“输出状态”。
BSRR:是一个端口位设置/清除寄存器;高16位是BRy,设置为1时对应位输出为置0,设置为0时无影响(这就是好处所在,不用顾虑会不会影响到其他的IO)
低16位是BSy,与上面相反;
BRR:端口为清除寄存器,作用与BSRR高16位作用雷同;
LCKR:32位的锁存寄存器;
其次写代码:(首先消除心理恐惧:新人看32代码,总觉得32的代码里的函数都好长好长啊,而且还那么多大小写,keil又不像VS一样支持提示选择,那样写起来的多麻烦啊!!
其实不用担心,因为库函数不需要自己一个字母一个字母地去敲,只要去相关文件中去找对应的函数就行了,所以,就是基本一直在copy)
(2)LED驱动代码书写 (注意:所有文件都应该包含stm32f10x.h头文件)
a.使能使用到的IO时钟,用到FWLIB里的rcc文件中的RCC_APB2PeriphClockCmd()函数,这里传递两个参数,一个是IO组,一个是开ENABLE(或者关DISABLE)
b.配置IO模式,定义一个GPIO_InitTypeDef的结构变量,这个结构变量里有GPIO_Mode、GPIO_Pin、GPIO_Speed三个成员,分别对他们初始化;然后
使用IO初始化函数,用初始化好的结构去初始化IO 口,函数举例:GPIO_Init(GPIOB,&GPIO_InitStructure);
c.初始化IO之后就是控制IO的高低电平了,这时候用到GPIO_SetBits()函数,需要两个参量,IO组名和IO脚号
d.然后再主函数中包含这个驱动的头文件就行了,延时函数去delay.c中去找,里面有us级的和ms级的延时函数;
有个疑问,我的开发板(战舰F1)插上去和拔下来的时候总是黑屏(壁纸没了),这是什么原因。。。。
一周热门 更多>