这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore4t_23 [2020/03/06 14:38] zgf [三、 实验原理] |
icore4t_23 [2022/04/01 10:46] (当前版本) sean |
||
---|---|---|---|
行 2: | 行 2: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-03-06 | gingko | 初次建立 | | | V1.0 | 2020-03-06 | gingko | 初次建立 | | ||
行 66: | 行 65: | ||
==== 二、 实验设备及平台 ==== | ==== 二、 实验设备及平台 ==== | ||
- | - iCore4T 双核心板。 | + | - iCore4T 双核心板。[[https://item.taobao.com/item.htm?spm=a1z10.1-c.w137644-251734891.3.5923532fDrMDOe&id=610595120319|点击购买]] |
- | - JLINK(或相同功能)仿真器。 | + | - JLINK(或相同功能)仿真器。[[https://item.taobao.com/item.htm?id=554869837940|点击购买]] |
- Micro USB线缆。 | - Micro USB线缆。 | ||
- Keil MDK 开发平台。 | - Keil MDK 开发平台。 | ||
行 102: | 行 101: | ||
* 线20:连接到电压比较器1。 | * 线20:连接到电压比较器1。 | ||
* 线21:连接到电压比较器2。 | * 线21:连接到电压比较器2。 | ||
- | * 其余的55个,请大家参考《STM32H7xx参考手册》第747页,Table141.EXTIEventinput | + | * 其余的55个,请大家参考《STM32H7xx参考手册》第747页,Table141.EXTIEventinput mapping,从上面可以看出,中断线0-15对应外部IO口的输入中断,一共是16个外部中断线。STM32H7供IO口使用的中断线只有16个,但是STM32H7的IO口却远远不止16个,那么STM32H7是怎么把16个中断线和IO口一一对应起来的呢?于是STM32就这样设计,GPIO的引脚GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G,H,I,J,K)分别对应中断线0~15。这样每个中断线对应了最多11个IO口,以线0为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0,GPIOH.0,GPIOI.0,GPIOJ.0,GPIOK.0。而中断线每次只能连接到1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了。 |
- | * mapping,从上面可以看出,中断线0-15对应外部IO口的输入中断,一共是16个外部中断线。STM32H7供IO口使用的中断线只有16个,但是STM32H7的IO口却远远不止16个,那么STM32H7是怎么把16个中断线和IO口一一对应起来的呢?于是STM32就这样设计,GPIO的引脚GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G,H,I,J,K)分别对应中断线0~15。这样每个中断线对应了最多11个IO口,以线0为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0,GPIOH.0,GPIOI.0,GPIOJ.0,GPIOK.0。而中断线每次只能连接到1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了。 | + | |
* GPIO和中断线映射关系是在寄存器SYSCFG_EXTICR1~SYSCFG_EXTICR4中配置的。 | * GPIO和中断线映射关系是在寄存器SYSCFG_EXTICR1~SYSCFG_EXTICR4中配置的。 | ||
* 所以我们要配置外部中断,还需要打开SYSCFG时钟。 | * 所以我们要配置外部中断,还需要打开SYSCFG时钟。 | ||
行 112: | 行 110: | ||
=== 1.主函数 === | === 1.主函数 === | ||
<code c> | <code c> | ||
+ | int main(void) | ||
+ | { | ||
+ | static int counter = 0; | ||
+ | HAL_Init(); | ||
+ | SystemClock_Config(); | ||
+ | i2c.initialize(); | ||
+ | axp152.initialize(); | ||
+ | axp152.set_dcdc1(3500);//[ARM & FPGA BK1/2/6 &OTHER] | ||
+ | axp152.set_dcdc2(1200);//[FPGA INT & PLL D] | ||
+ | axp152.set_aldo1(2500);//[FPGA PLL A] | ||
+ | axp152.set_dcdc4(3300);//[POWER_OUTPUT] | ||
+ | | ||
+ | axp152.set_dcdc3(3300);//[FPGA BK4][Adjustable] | ||
+ | axp152.set_aldo2(3300);//[FPGA BK3][Adjustable] | ||
+ | axp152.set_dldo1(3300);//[FPGA BK7][Adjustable] | ||
+ | axp152.set_dldo2(3300);//[FPGA BK5][Adjustable] | ||
+ | |||
+ | MX_GPIO_Init(); | ||
+ | LED_ON; | ||
+ | while (1) | ||
+ | { | ||
+ | /* 每按下一次按键触发一次中断,以LED状态表述是否触发 */ | ||
+ | if(exti_flag == 1){ | ||
+ | HAL_Delay(20);//消抖 | ||
+ | if(HAL_GPIO_ReadPin(ARM_KEY_GPIO_Port, ARM_KEY_Pin) == GPIO_P IN_RESET){ | ||
+ | exti_flag = 0; | ||
+ | if(counter ++ % 2){ | ||
+ | LED_ON; | ||
+ | }else{ | ||
+ | LED_OFF; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
</code> | </code> | ||
=== 2.中断回调函数 === | === 2.中断回调函数 === | ||
<code c> | <code c> | ||
+ | void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) | ||
+ | { | ||
+ | if(GPIO_Pin == ARM_KEY_Pin){ | ||
+ | exti_flag = 1; | ||
+ | } | ||
+ | } | ||
</code> | </code> |