(1)序言
刚开始学
STM32,当然是点亮LED灯了,从arm中的“hello word”开始着手。
软件安装,硬件连接,前面文章已经有讲,这里不再多说。
(2)实验目的:使用STM32F10C8T6完成流水灯的功能。
(3)本次入门实验遇到的问题:
程序写完了,灯就是不亮,调试了两个小时,终于找到原因,留个悬念,后面再说。
(4)废话不说,先上电路图:
![STM32F103C8T6点亮LED灯(流水灯) STM32 第1张 STM32F103C8T6点亮LED灯(流水灯) STM32 第1张](http://www.mcuc.com.cn/zb_users/upload/2016/12/201612231482504988885599.png)
图1 引脚图
(5)OK,上干货,代码:
#include "stm32f10x.h" GPIO_InitTypeDef GPIO_InitStructure; void mydelay_ms(int ms) { volatile int i; int k = ms * 2333 ; for ( i=0; i ; } } void LED_INIT(void) { SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); } int main(void) { LED_INIT(); while (1){ GPIO_SetBits(GPIOB, GPIO_Pin_3); GPIO_ResetBits(GPIOB, GPIO_Pin_4); mydelay_ms(500); GPIO_ResetBits(GPIOB, GPIO_Pin_3); GPIO_SetBits(GPIOB, GPIO_Pin_4); mydelay_ms(500); } }
(6)代码内容分析:
首先,该代码分为三部分:延时函数,初始化函数,主函数,具体意思见代码注释。
其次,以下几点是代码中需要注意的地方:
a.可以看到有两个LED灯,分别由引脚 PB3 和 PB4 控制。故给这两个引脚配置为:IO输出,高电平即可。
b.stm32中有很多GPIO口,分别用“GPIO+x”的形式表示,x表示具体的口,上图中PB,表示用的是GPIOB口。故代码中控制应该使用GPIOB。
c.GPIO_Pin_3表示对3引脚操作,同理GPIO_Pin_4表示对4引脚操作。结合GPIOB,则表示操作PB3和PB4。
d.GPIO_SetBits()表示设置为高电平,GPIO_ResetBits()表示设置为低电平。
(7)本次试验遇到的问题:
一开始检查代码都正常,貌似没有错误,可是灯就是不亮,后来看手册发现原来PB3 PB4引脚都有个复用功能,系统默认使用了复用的功能,从而不再是IO输出功能,需要把复用功能关掉,才能正常输出IO信号。
上干货(图):
![STM32F103C8T6点亮LED灯(流水灯) STM32 第2张 STM32F103C8T6点亮LED灯(流水灯) STM32 第2张](http://www.mcuc.com.cn/zb_users/upload/2016/12/201612231482505055268906.jpg)
图2 stm32f103c数据手册,PB口功能
可以看到,默认功能是JTDO和JNTRST,所以把这两个功能关闭即可。
对应代码为LED初始化函数
LED_INIT() 中红色部分。
(8)打完收工,继续我的菜鸟成功之旅。希望有经验的大婶要是看见有错误的地方可以给予指正,感谢~~~[捂脸]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)