STM32F103C8T6点亮LED灯(流水灯)(IO口的初始复用功能)

(1)序言
            刚开始学 STM32,当然是点亮LED灯了,从arm中的“hello word”开始着手。
            软件安装,硬件连接,前面文章已经有讲,这里不再多说。

(2)实验目的:使用STM32F10C8T6完成流水灯的功能。

(3)本次入门实验遇到的问题:
            程序写完了,灯就是不亮,调试了两个小时,终于找到原因,留个悬念,后面再说。

(4)废话不说,先上电路图:

STM32F103C8T6点亮LED灯(流水灯) STM32 第1张

图1 引脚图

(5)OK,上干货,代码:

C
#include "stm32f10x.h"  //GPIO Structure GPIO_InitTypeDef GPIO_InitStructure;   //Delay Function void mydelay_ms(int ms) {  volatile int i;  int k = ms * 2333 ;  for ( i=0; i ;  }  }   //LED Init Function void LED_INIT(void) { //Initialize System Timer SystemInit();  //使能PB3和PB4,并关闭PB3和PB4的复用功能,使IO功能生效 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE);  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);  //GPIO Structure GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4; //Chose Pin3 and Pin4 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Set Frequency 50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //暂时不懂,只知道好像是推挽式  //GPIO init GPIO_Init(GPIOB, &GPIO_InitStructure);  }  int main(void) { LED_INIT();  while (1){ //LED3 ON && LED4 OFF GPIO_SetBits(GPIOB, GPIO_Pin_3); GPIO_ResetBits(GPIOB, GPIO_Pin_4); mydelay_ms(500);  //LED3 OFF && LED4 ON 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张

图2 stm32f103c数据手册,PB口功能

            可以看到,默认功能是JTDO和JNTRST,所以把这两个功能关闭即可。
            对应代码为LED初始化函数  LED_INIT() 中红色部分。

(8)打完收工,继续我的菜鸟成功之旅。希望有经验的大婶要是看见有错误的地方可以给予指正,感谢~~~[捂脸]
  • 16
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值