GPIOLED配置、key、中断NVIC配置

发布时间:2024-08-14  

 1 #include 'stm32f10x.h'

 2 #include 'stm32f10x_gpio.h'

 3 

 4 //内核,(NVIC)

 5 #include 'misc.h'

 6 

 7 //点亮红色灯  PB5

 8 //step1:使能

 9 Rcc_APB2PeriPhClockCmd(

10 Rcc_APB2PeriPh_GPIOB,ENABLE);

11 //step2:定义GPIO初始化结构体变量

12 GPIO_InitTypeDef a;

13 a.GPIO_Speed = GPIO_Speed_50MHz;

14 a.GPIO_Pin = GPIO_Pin_5;

15 //推挽输出

16 a.GPIO_Mode = GPIO_Mode_OUT_PP;

17 //step3:调用GPIO初始化函数

18 GPIO_Init(GPIOB,&a);

19 //step4:设置PB5为低电平

20 GPIO_ResetBits(GPIOB,GPIO_Pin_5);

21 

22 //读取引脚的电平

23 int i = GPIO_ReadDataInputBit(

24 GPIOB,GPIO_Pin_5);

25 

26 /*按键初始化*/

27 Rcc_APB2PeriPhClockCmd(

28 Rcc_APB2PeriPh_GPIOA,ENABLE);

29 //step2:定义GPIO初始化结构体变量

30 GPIO_InitTypeDef a;

31 a.GPIO_Speed = GPIO_Speed_50MHz;

32 a.GPIO_Pin = GPIO_Pin_0;

33 //浮空输入

34 a.GPIO_Mode = GPIO_Mode_IN_FLOATING;

35 //step3:调用GPIO初始化函数

36 GPIO_Init(GPIOA,&a);

37 

38 

39 /*循环读取按键  PA0*/

40 while(1){

41     int i = GPIO_ReadDataInputBit(

42     GPIOB,GPIO_Pin_5);

43     if(i == 0){

44         //按键按下,点亮LED

45         GPIO_ResetBits(GPIOB,GPIO_Pin_5);

46     }else{

47         //松开,熄灭灯

48         GPIO_SetBits(GPIOB,GPIO_Pin_5);

49     }

50 }

51 while(1){

52     if(GPIO_ReadDataInputBit(

53     GPIOA,GPIO_Pin_0) == 0){

54         //按键按下进入这里执行

55         if(GPIO_ReadDataInputBit(

56         GPIOB,GPIO_Pin_5) == 0){

57         //每按一次,灯的状态反转

58         GPIO_SetBits(GPIOB,GPIO_Pin_5);

59         }else{

60         GPIO_ResetBits(GPIOB,GPIO_Pin_5);

61         }    

62     }

63 }

64 

65 /*NVIC*/

66 //step1:优先级分组

67 NVIC_PriorityGroupConfig(

68     NVIC_PriorityGroup_1;

69 );

70 //step2:NVIC初始化结构体

71 NVIC_InitTypeDef b;

72 //中断源

73 b.NVIC_IRQChannel =  EXTI0_IRQn;

74 //抢占优先级

75 b.NVIC_IRQChannelPreemptionPriority = 1;

76 //子优先级

77 b.NVIC_IRQChannelSubPriority = 1;

78 //使能

79 b.NVIC_IRQChannelCmd = ENABLE;

80 //step3:NVIC初始化函数

81 NVIC_Init(&b);

82 

83 //中断处理函数

84 void 中断名_IRQHandler(){    

85 }

86 void EXTI0_IRQHandler(){

87 

88 }


  1 #include 'stm32f10x.h'

  2 #include 'stm32f10x_gpio.h'

  3 #include 'stm32f10x_exti.h'

  4 

  5 //内核,(NVIC)

  6 #include 'misc.h'

  7 

  8 //点亮红色灯  PB5

  9 //step1:使能

 10 Rcc_APB2PeriPhClockCmd(

 11 Rcc_APB2PeriPh_GPIOB,ENABLE);

 12 //step2:定义GPIO初始化结构体变量

 13 GPIO_InitTypeDef a;

 14 a.GPIO_Speed = GPIO_Speed_50MHz;

 15 a.GPIO_Pin = GPIO_Pin_5;

 16 //推挽输出

 17 a.GPIO_Mode = GPIO_Mode_OUT_PP;

 18 //step3:调用GPIO初始化函数

 19 GPIO_Init(GPIOB,&a);

 20 //step4:设置PB5为低电平

 21 GPIO_ResetBits(GPIOB,GPIO_Pin_5);

 22 

 23 //读取引脚的电平

 24 int i = GPIO_ReadDataInputBit(

 25 GPIOB,GPIO_Pin_5);

 26 

 27 /*按键初始化*/

 28 Rcc_APB2PeriPhClockCmd(

 29 Rcc_APB2PeriPh_GPIOA,ENABLE);

 30 //step2:定义GPIO初始化结构体变量

 31 GPIO_InitTypeDef a;

 32 a.GPIO_Speed = GPIO_Speed_50MHz;

 33 a.GPIO_Pin = GPIO_Pin_0;

 34 //浮空输入

 35 a.GPIO_Mode = GPIO_Mode_IN_FLOATING;

 36 //step3:调用GPIO初始化函数

 37 GPIO_Init(GPIOA,&a);

 38 

 39 

 40 /*循环读取按键  PA0*/

 41 while(1){

 42     int i = GPIO_ReadDataInputBit(

 43     GPIOB,GPIO_Pin_5);

 44     if(i == 0){

 45         //按键按下,点亮LED

 46         GPIO_ResetBits(GPIOB,GPIO_Pin_5);

 47     }else{

 48         //松开,熄灭灯

 49         GPIO_SetBits(GPIOB,GPIO_Pin_5);

 50     }

 51 }

 52 while(1){

 53     if(GPIO_ReadDataInputBit(

 54     GPIOA,GPIO_Pin_0) == 0){

 55         //按键按下进入这里执行

 56         if(GPIO_ReadDataInputBit(

 57         GPIOB,GPIO_Pin_5) == 0){

 58         //每按一次,灯的状态反转

 59         GPIO_SetBits(GPIOB,GPIO_Pin_5);

 60         }else{

 61         GPIO_ResetBits(GPIOB,GPIO_Pin_5);

 62         }    

 63     }

 64 }

 65 

 66 /*NVIC*/

 67 //step1:优先级分组

 68 NVIC_PriorityGroupConfig(

 69     NVIC_PriorityGroup_1;

 70 );

 71 //step2:NVIC初始化结构体

 72 NVIC_InitTypeDef b;

 73 //中断源

 74 b.NVIC_IRQChannel =  EXTI0_IRQn;

 75 //抢占优先级

 76 b.NVIC_IRQChannelPreemptionPriority = 1;

 77 //子优先级

 78 b.NVIC_IRQChannelSubPriority = 1;

 79 //使能

 80 b.NVIC_IRQChannelCmd = ENABLE;

 81 //step3:NVIC初始化函数

 82 NVIC_Init(&b);

 83 

 84 //中断处理函数

 85 void 中断名_IRQHandler(){    

 86 }

 87 

 88 void EXTI0_IRQHandler(){

 89 

 90 }

 91 

 92 /*外部中断配置*/

 93 //外部中断结构体

 94 EXTI_InitTypeDef c;

 95 c.EXTI_Line = EXTI_Line0;

 96 c.EXTI_Mode = EXTI_Mode_Interrupt;

 97 c.EXTI_Trigger = EXTI_Trigger_Rising;

 98 c.EXTI_LineCmd = ENABLE;

 99 //外部中断初始化函数

100 EXTI_Init(&c);

101 

102 //配置外部中断的触发引脚

103 GPIO_EXTILineConfig(

104     GPIOPortSourceGPIOC,GPIOPinSourcePin0

105 );

106 Rcc_APB2PeriPhClockCmd(

107 Rcc_APB2PeriPh_GPIOC,ENABLE);

108 GPIO_InitTypeDef a;

109 a.GPIO_Speed = GPIO_Speed_50MHz;

110 a.GPIO_Pin = GPIO_Pin_0;

111 //浮空输入

112 a.GPIO_Mode = GPIO_Mode_IN_FLOATING;

113 GPIO_Init(GPIOC,&a);

114 

115 void EXTI0_IRQHandler(){

116     GPIO_ResetBits(GPIOB,GPIO_Pin_5);

117     

118     手动把中断标志位清零

119     EXTI_ClearITPendingBit(EXTI_Line0);

120 }


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    。 使用 arp 命令,能够查看本地计算机或另一台计算机的 ARP 高速缓存中的当前内容。此外,使用 arp 命令可以人工方式设置静态的网卡物理地址 / IP 地址对,使用这种方式可以为缺省网关和本地服务器等常用主机进行本地静态......
    多台电机同步变频器的参数如何设置;要知道变频器的参数如何设置,首先要明白变频器是什么东西,用它来做些什么活。 变频器是用来调整异步电机转速的一种电源装置,根据转速n=60f/p(1-s)这个......
    禁止时钟/日历更新至外组寄存器,从而允许用户访问静态数据。如果内部振荡器被启动,则内组寄存器将被不断地更新,而不管外组寄存器如何设置,以保证维持精确的RTC信息。 DS1558具有中断(/IRQ/FT......
    掩码 ip_addr_t gw={0};//网关 /*静态分配IP*/ // IP4_ADDR(&ip_addr,192,168,12,23);//设置静态IP // IP4_ADDR(&......
    .配置静态ip: 前提步骤:使用vmware的虚拟网络编辑器将虚拟网卡的dhcp关闭,并设置子网地址和网关。 在主机的网路共享中心,根据虚拟网路编辑器里的信息更改 vmnet8 的属性,配置ip 和网......
    变频器控制多台电机同步的参数该怎么设置呢?;要知道变频器的参数如何设置,首先要明白变频器是什么东西,用它来做些什么活。 变频器是用来调整异步电机转速的一种电源装置,根据转速n=60f/p(1......
    方。 结合STM32的开发讲述堆栈 从上面的描述可以看得出来,在代码中是如何占用堆和栈的。可能很多人还是无法理解,这里再结合STM32的开发过程中与堆栈相关的内容来进行讲述。 如何设置STM32的堆......
    要在Switch_1和上Switch_2之间配置静态路由或运行动态路由协议(跨两台以上三层交换机时,建议运行动态路由协议)。 03 通过流策略实现VLAN间互访控制 如图 6 所示,为了的安全性,某公......
    大量节约网络带宽、降低网络负载。在IPv6网络中,组播技术的应用得到了进一步的丰富和加强。MLD可以理解为IGMP的IPv6版本,两者的协议行为完全相同,区别仅仅在于报文格式。 因此,MLD定义了一个IPv6网段内组播路由器与成员主机之间如何......
    用户总是使用最新的版本,目前最新的版本是Step7-Micro/WINV4.0SP1。 23、通讯口参数如何设置? 缺省情况下,S7-200CPU的通讯口处于PPI从站模式,地址为2,通讯速率为9.6K。 要更改通讯口的地址......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>