用户工具

站点工具


icore3_arm_hal_4

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
icore3_arm_hal_4 [2020/01/16 16:47]
zgf [三、 实验原理]
icore3_arm_hal_4 [2022/03/18 15:00] (当前版本)
sean
行 1: 行 1:
 +|**银杏科技有限公司旗下技术文档发布平台** ​ ||||
 +|技术支持电话|**0379-69926675-801** ​ |||
 +|技术支持邮件|Gingko@vip.163.com ​ |||
 +^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 +|  V1.0  |  2020-1-16 ​ |  gingko ​ |  初次建立 ​ |
 +
 +
 ===== STM32CubeMX教程四——EXTI外部中断输入实验 ===== ===== STM32CubeMX教程四——EXTI外部中断输入实验 =====
  
 1. 新建工程:在主界面选择File-->​New Project ​  ​或者直接点击ACCEE TO MCU SELECTOR  ​ 1. 新建工程:在主界面选择File-->​New Project ​  ​或者直接点击ACCEE TO MCU SELECTOR  ​
- +{{ :​icore3:​icore3_cube_4_1.png?​direct&​900 | }}
 2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置
 在搜索栏的下面,提供的各 ​ 种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。 在搜索栏的下面,提供的各 ​ 种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。
-  +{{ :​icore3:​icore3_cube_4_2.png?​direct&​900 | }}
- +
 3. 配置RCC,使用外部时钟源 3. 配置RCC,使用外部时钟源
- +{{ :​icore3:​icore3_cube_4_3.png?​direct&​900 | }}
 4. 配置调试引脚 4. 配置调试引脚
-  +{{ :​icore3:​icore3_cube_4_4.png?​direct&​900 | }}
- +
- +
- +
- +
 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output
- +{{ :​icore3:​icore3_cube_4_5.png?​direct&​900 | }}
 6. 将ARM_KEY对应的引脚(PH15)设置为GPIO_EXTI15 6. 将ARM_KEY对应的引脚(PH15)设置为GPIO_EXTI15
-  +{{ :​icore3:​icore3_cube_4_6.png?​direct&​900 | }}
- +
- +
- +
- +
- +
- +
- +
- +
- +
 7. 引脚模式配置 7. 引脚模式配置
-三色LED引脚配置 +  * 三色LED引脚配置 
-  +{{ :​icore3:​icore3_cube_4_7.png?​direct&​900 | }} 
-ARM_KEY引脚配置,GPIO_EXIT有6种模式,这里选择下降沿触发外部中断。 +  ​* ​ARM_KEY引脚配置,GPIO_EXIT有6种模式,这里选择下降沿触发外部中断。 
-  +{{ :​icore3:​icore3_cube_4_8.png?​direct&​900 | }}
- +
- +
- +
- +
 8. 设置NVIC(嵌套向量中断控制器) 8. 设置NVIC(嵌套向量中断控制器)
- +{{ :​icore3:​icore3_cube_4_9.png?​direct&​900 | }}
 9. 时钟源设置,选择外部高速时钟源,配置为最大主频 9. 时钟源设置,选择外部高速时钟源,配置为最大主频
-  +{{ :​icore3:​icore3_cube_4_10.png?​direct&​900 | }}
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
 10.  工程文件的设置,​ 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 ​ IDE我们使用的是 MDK5 10.  工程文件的设置,​ 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 ​ IDE我们使用的是 MDK5
- +{{ :​icore3:​icore3_cube_4_11.png?​direct&​900 | }}
 11. 点击Code Generator,进行进一步配置 11. 点击Code Generator,进行进一步配置
- +{{ :​icore3:​icore3_cube_4_12.png?​direct&​900 | }}
   * **Copy all used libraries into the project folder**   * **Copy all used libraries into the project folder**
   * 将HAL库的所有.C和.H都复制到所建工程中   * 将HAL库的所有.C和.H都复制到所建工程中
行 75: 行 49:
  
 12. 然后点击GENERATE CODE  创建工程。创建成功,打开工程。 12. 然后点击GENERATE CODE  创建工程。创建成功,打开工程。
- +{{ :​icore3:​icore3_cube_4_13.png?​direct&​900 | }} 
 ===== 实验四:EXTI外部中断输入实验——读取ARM按键状态 ===== ===== 实验四:EXTI外部中断输入实验——读取ARM按键状态 =====
  
行 87: 行 61:
 ==== 二、 实验设备及平台 ==== ==== 二、 实验设备及平台 ====
  
-  - iCore3 双核心板 +  - iCore3 双核心板[[https://​item.taobao.com/​item.htm?​spm=a1z10.1-c.w4024-251734887.3.5923532fXD2RIN&​id=524229438677&​scene=taobao_shop|点击购买]] 
-  - JLINK(或相同功能)仿真器+  - JLINK(或相同功能)仿真器[[https://​item.taobao.com/​item.htm?​spm=a1z10.5-c.w4002-251734908.13.20822b61MmPeNN&​id=554869837940|点击购买]]
   - Micro USB线缆   - Micro USB线缆
   - Keil MDK 开发平台   - Keil MDK 开发平台
行 111: 行 85:
     - 每个中断线都具有专用的状态位。     - 每个中断线都具有专用的状态位。
     - 支持多达23个软件事件/​中断请求。     - 支持多达23个软件事件/​中断请求。
- +{{ :​icore3:​icore3_arm_hal_4_1.png?​direct&​700 |}} 
   * 外部中断/​事件线映射:   * 外部中断/​事件线映射:
     * 多达140个的GPIO通过以下方式连接到16个外部中断/​事件线:     * 多达140个的GPIO通过以下方式连接到16个外部中断/​事件线:
- +{{ :​icore3:​icore3_arm_hal_4_2.png?​direct&​400 |}} 
   * 另外七根EXTI线连接方式如下:​   * 另外七根EXTI线连接方式如下:​
     * EXTI线16连接到PVD输出。     * EXTI线16连接到PVD输出。
行 145: 行 119:
     * 最低1位用于指定响应优先级。     * 最低1位用于指定响应优先级。
   * 按键的一端与STM32的GPIO(PH15)相连,另外一端接地,且PH15外接一个1K电流大小的上拉电阻。初始化时把PH15设置成输入模式,当按键弹起时,PH15由于上拉电阻的作用呈高电平(3.3V);当按键按下时,PH15直接被按键短接到GND,呈低电平。因此PH15的电平变化产生下降沿,从而进入中断函数,可得到按键状态。原理示意图如下图所示。   * 按键的一端与STM32的GPIO(PH15)相连,另外一端接地,且PH15外接一个1K电流大小的上拉电阻。初始化时把PH15设置成输入模式,当按键弹起时,PH15由于上拉电阻的作用呈高电平(3.3V);当按键按下时,PH15直接被按键短接到GND,呈低电平。因此PH15的电平变化产生下降沿,从而进入中断函数,可得到按键状态。原理示意图如下图所示。
-  +{{ :​icore3:​icore3_arm_hal_4_3.png?​direct&​500 |}} 
 ==== 四、 实验程序 ==== ==== 四、 实验程序 ====
  
 === 1. 主函数 === === 1. 主函数 ===
- +<code c> 
- +int main(void) ​  
 +{     
 +HAL_Init(); ​                //​重置所有外围设备。 
 +    SystemClock_Config(); ​  //​配置系统时钟 
 +    MX_GPIO_Init(); ​        //​初始化所有已配置的外围设备 
 +  LED_RED_ON; ​        //​初始化LED状态 ​      
 +  while (1)   
 +  {      
 +    }      
 +}   
 +</​code>​
 === 2. 中断回调函数 === === 2. 中断回调函数 ===
 +<code c>
 +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
 +</​code>​
 功能:中断函数具体要响应的动作。 功能:中断函数具体要响应的动作。
- +<code c> 
 +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) ​  
 +{   
 +    static int led_work_status = 0;   
 +    HAL_Delay(10); ​  
 +    if(ARM_KEY_STATE == KEY_DOWN){ ​  
 +        led_work_status += 1;   
 +        if(led_work_status > 2)led_work_status = 0;   
 +    }   
 +    switch(led_work_status){ ​  
 +        case 0:   
 +            LED_RED_ON; ​  
 +            LED_GREEN_OFF; ​  
 +            LED_BLUE_OFF; ​  
 +            break; ​  
 +        case 1:   
 +            LED_RED_OFF; ​  
 +            LED_GREEN_ON; ​  
 +            LED_BLUE_OFF; ​  
 +            break; ​  
 +        case 2:   
 +            LED_RED_OFF; ​  
 +            LED_GREEN_OFF; ​  
 +            LED_BLUE_ON; ​  
 +            break; ​  
 +            default: ​  
 +            break; ​  
 +    }   
 +    __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_9); ​   
 +}  
 +</​code>​
    
 ==== 五、 实验步骤 ==== ==== 五、 实验步骤 ====
icore3_arm_hal_4.1579164429.txt.gz · 最后更改: 2020/01/16 16:47 由 zgf