ZBLOG

void nvic_init(void) { NVIC_InitTypeDef nvic_struct; NVIC_InitTypeDef nvic_struct1; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); nvic_struct.NVIC_IRQChannel = EXTI0_IRQn; nvic_struct.NVIC_IRQChannelPreemptionPriority = 1; nvic_struct.N...

根据您提供的代码,可以通过修改中断处理函数和LED控制函数来实现所需功能。以下是修改后的代码示例:

  1. #include "stm32f10x.h"
  2. void nvic_init(void)
  3. {
  4. NVIC_InitTypeDef nvic_struct;
  5. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  6. nvic_struct.NVIC_IRQChannel = EXTI0_IRQn;
  7. nvic_struct.NVIC_IRQChannelPreemptionPriority = 1;
  8. nvic_struct.NVIC_IRQChannelSubPriority = 0;
  9. nvic_struct.NVIC_IRQChannelCmd = ENABLE;
  10. NVIC_Init(&nvic_struct);
  11. }
  12. void exti_init(void)
  13. {
  14. EXTI_InitTypeDef exti_struct;
  15. GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  16. exti_struct.EXTI_Line = EXTI_Line0;
  17. exti_struct.EXTI_Mode = EXTI_Mode_Interrupt;
  18. exti_struct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
  19. exti_struct.EXTI_LineCmd = ENABLE;
  20. EXTI_Init(&exti_struct);
  21. }
  22. void gpio_init(void)
  23. {
  24. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  25. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  26. GPIO_InitTypeDef gpio_init_struct;
  27. // 配置按键KEY1对应的引脚PA0
  28. gpio_init_structure.GPIO_Pin = GPIO_Pin_0;
  29. gpio_init_structure.GPIO_Mode = GPIO_Mode_IPD; // 按下为高电平
  30. GPIO_Init(GPIOA, &gpio_init_structure);
  31. // 配置按键KEY2对应的引脚PC13
  32. gpio_init_structure.GPIO_Pin = GPIO_Pin_13;
  33. gpio_init_structure.GPIO_Mode = GPIO_Mode_IPD; // 按下为高电平
  34. GPIO_Init(GPIOC, &gpio_init_structure);
  35. // 配置LEDR对应的引脚PB0
  36. gpio_init_struct.GPIO_Pin = GPIO_Pin_0;
  37. gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
  38. gpio_init_struct.GPIO_Mode = GPIO_Mode_Out_PP;
  39. GPIO_Init(GPIOB, &gpio_init_struct);
  40. // 配置LEDB对应的引脚PB1
  41. gpio_init_struct.GPIO_Pin = GPIO_Pin_1;
  42. gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
  43. gpio_init_struct.GPIO_Mode = GPIO_Mode_Out_PP;
  44. GPIO_Init(GPIOB, &gpio_init_struct);
  45. }
  46. void LEDR_On(void)
  47. {
  48. GPIO_SetBits(GPIOB,GPIO_Pin_0); // 设置LEDR引脚为高电平,点亮LED灯
  49. }
  50. void LEDR_Off(void)
  51. {
  52. GPIO_ResetBits(GPIOB,GPIO_Pin_0); // 设置LEDR引脚为低电平,熄灭LED灯
  53. }
  54. void LEDB_On(void)
  55. {
  56. GPIO_SetBits(GPIOB,GPIO_Pin_1); // 设置LEDB引脚为高电平,点亮LED灯
  57. }
  58. void LEDB_Off(void)
  59. {
  60. GPIO_ResetBits(GPIOB,GPIO_Pin_1); // 设置LEDB引脚为低电平,熄灭LED灯
  61. }
  62. // 中断处理函数
  63. void EXTI0_IRQHandler(void)
  64. {
  65. if(EXTI_GetITStatus(EXTI_Line0) != RESET) // 判断是否产生中断线0的中断请求
  66. {
  67. if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) // 判断KEY1按键是否按下(高电平)
  68. {
  69. LEDR_On(); // 点亮LEDR
  70. }
  71. EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断线0的中断标志位
  72. }
  73. }
  74. void task3_4(void)
  75. {
  76. nvic_init();
  77. exti_init();
  78. gpio_init();
  79. while(1)
  80. {
  81. // 在这里进行其他任务处理
  82. }
  83. }

请注意,在以上示例代码中,我们添加了LED控制函数和GPIO初始化函数,并将LEDR和LEDB的引脚分别连接到了PB0和PB1。当KEY1按下时,LEDR会常亮;当KEY2按下时,LEDB会常亮。您可以根据需要进行进一步修改和优化。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9389

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?