打印
[AT32F407]

exint问题

[复制链接]
178|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhjb1|  楼主 | 2024-11-13 17:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhjb1 于 2024-11-13 17:37 编辑

用Work_Bench创建了一个AT的工程,在做实验时能遇到一些问题,以后慢慢提问并解决。如果解决了,会将代码放上一起学习。
三、exint设置中断key的问题
在AWB中设置了5个exint中断输入,工程代码如下:
void wk_exint_config(void)
{
  /* add user code begin exint_config 0 */

  /* add user code end exint_config 0 */

  gpio_init_type gpio_init_struct;
  exint_init_type exint_init_struct;

  /* add user code begin exint_config 1 */

  /* add user code end exint_config 1 */

  /* configure the EXINT0 */
  gpio_default_para_init(&gpio_init_struct);
  gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
  gpio_init_struct.gpio_pins = key0_PIN;
  gpio_init_struct.gpio_pull = GPIO_PULL_UP;
  gpio_init(key0_GPIO_PORT, &gpio_init_struct);

  gpio_exint_line_config(GPIO_PORT_SOURCE_GPIOA, GPIO_PINS_SOURCE0);

  exint_default_para_init(&exint_init_struct);
  exint_init_struct.line_enable = TRUE;
  exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT;
  exint_init_struct.line_select = EXINT_LINE_0;
  exint_init_struct.line_polarity = EXINT_TRIGGER_FALLING_EDGE;
  exint_init(&exint_init_struct);

  /* configure the EXINT1 */
  gpio_default_para_init(&gpio_init_struct);
  gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
  gpio_init_struct.gpio_pins = key1_PIN;
  gpio_init_struct.gpio_pull = GPIO_PULL_UP;
  gpio_init(key1_GPIO_PORT, &gpio_init_struct);

  gpio_exint_line_config(GPIO_PORT_SOURCE_GPIOB, GPIO_PINS_SOURCE1);

  exint_default_para_init(&exint_init_struct);
  exint_init_struct.line_enable = TRUE;
  exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT;
  exint_init_struct.line_select = EXINT_LINE_1;
  exint_init_struct.line_polarity = EXINT_TRIGGER_BOTH_EDGE;
  exint_init(&exint_init_struct);

  /* configure the EXINT2 */
  gpio_default_para_init(&gpio_init_struct);
  gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
  gpio_init_struct.gpio_pins = key2_PIN;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(key2_GPIO_PORT, &gpio_init_struct);

  gpio_exint_line_config(GPIO_PORT_SOURCE_GPIOB, GPIO_PINS_SOURCE2);

  exint_default_para_init(&exint_init_struct);
  exint_init_struct.line_enable = TRUE;
  exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT;
  exint_init_struct.line_select = EXINT_LINE_2;
  exint_init_struct.line_polarity = EXINT_TRIGGER_BOTH_EDGE;
  exint_init(&exint_init_struct);

  /* configure the EXINT5 */
  gpio_default_para_init(&gpio_init_struct);
  gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
  gpio_init_struct.gpio_pins = key3_PIN;
  gpio_init_struct.gpio_pull = GPIO_PULL_UP;
  gpio_init(key3_GPIO_PORT, &gpio_init_struct);

  gpio_exint_line_config(GPIO_PORT_SOURCE_GPIOE, GPIO_PINS_SOURCE5);

  exint_default_para_init(&exint_init_struct);
  exint_init_struct.line_enable = TRUE;
  exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT;
  exint_init_struct.line_select = EXINT_LINE_5;
  exint_init_struct.line_polarity = EXINT_TRIGGER_BOTH_EDGE;
  exint_init(&exint_init_struct);

  /* configure the EXINT6 */
  gpio_default_para_init(&gpio_init_struct);
  gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
  gpio_init_struct.gpio_pins = key4_PIN;
  gpio_init_struct.gpio_pull = GPIO_PULL_UP;
  gpio_init(key4_GPIO_PORT, &gpio_init_struct);

  gpio_exint_line_config(GPIO_PORT_SOURCE_GPIOE, GPIO_PINS_SOURCE6);

  exint_default_para_init(&exint_init_struct);
  exint_init_struct.line_enable = TRUE;
  exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT;
  exint_init_struct.line_select = EXINT_LINE_6;
  exint_init_struct.line_polarity = EXINT_TRIGGER_BOTH_EDGE;
  exint_init(&exint_init_struct);

  /* add user code begin exint_config 2 */

  /* add user code end exint_config 2 */
}
分别是PA_0、PB_1、PB_2、PE_5、PE_6,PA_0板上已有用户键,后四个外加按键4个。设置为上拉,双向中断(将来有用)
看代码PA_0--EXINT_LINE_0;PB_1--EXINT_LINE_1;PB_2--EXINT_LINE_2;PE_5--EXINT_LINE_5;PE_6--EXINT_LINE_6
加入中断响应函数:
void EXINT0_IRQHandler(void){
if(exint_flag_get(EXINT_LINE_0) != RESET){
  kk=100;
  exint_flag_clear(EXINT_LINE_0);
}
}
void EXINT1_IRQHandler(void){
if(exint_flag_get(EXINT_LINE_1) != RESET){
  kk=201;
  exint_flag_clear(EXINT_LINE_1);
}
}
void EXINT2_IRQHandler(void){
if(exint_flag_get(EXINT_LINE_2) != RESET){
  kk=202;
  exint_flag_clear(EXINT_LINE_2);
}
}
代码只是将按下间的键值赋给kk变量而后在LCD上显示结果,前三个,没有问题,后两个就报错,遍历项目所有文档,没有PE_5,PE_6的EXINT_LINE_5和EXINT_LINE_6这两个中断线,可以找到EXINT_LINE_n的初设程序,是否需要自己创建这两个EXINT_LINE_5和6呢?比葫芦画瓢设置了一下,报错一片。

发帖咨询如何将这两个PE_5,PE_6IO口的中断按键响应也弄出来,尽管3个已经够用了,实验吗。
此实验还有三个IO--input,这个简单。
先谢谢了。

使用特权

评论回复
沙发
我喜欢打游戏| | 2024-11-13 20:23 | 只看该作者
这是哪个芯片,具体的型号说明一下

使用特权

评论回复
板凳
zhjb1|  楼主 | 2024-11-13 20:38 | 只看该作者
本帖最后由 zhjb1 于 2024-11-13 20:43 编辑

AT32F407VGT7,Sorry,提问上边写错了,EXINT_LINE_0->EXINT_LINE_19,一共20 个,这2个线有,下边的
EXINT5_IRQn、EXINT6_IRQn没有,无法设置这个中断获得键值。

使用特权

评论回复
地板
呐咯密密| | 2024-11-13 20:53 | 只看该作者
EXINT5_IRQn、EXINT6_IRQn这两个就是没有的,因为5-9是公用一个中断函数的,应该是EXINT9_5_IRQn

使用特权

评论回复
5
zhjb1|  楼主 | 2024-11-14 08:18 | 只看该作者
呐咯密密 发表于 2024-11-13 20:53
EXINT5_IRQn、EXINT6_IRQn这两个就是没有的,因为5-9是公用一个中断函数的,应该是EXINT9_5_IRQn ...

谢谢您,我试试EXINT9_5_IRQn
实际上还可以找到:EXINT4_IRQHandler,EXINT15_10_IRQHandler
我可以都试试。
已测试过一个,按下键后,以前能用的也就失常了。估计停在中断处理上了
再次感谢

使用特权

评论回复
6
zhjb1|  楼主 | 2024-11-14 08:35 | 只看该作者
本帖最后由 zhjb1 于 2024-11-14 09:50 编辑

呐咯密密
您好!测试EXINT9_5_IRQn成功了,代码如下:
void EXINT9_5_IRQHandler(void){//EXINT9_5_IRQHandler//EXINT4_IRQHandler//EXINT15_10_IRQHandler
if(exint_flag_get(EXINT_LINE_5|EXINT_LINE_6) != RESET){
  if(gpio_input_data_bit_read(GPIOE,key3_PIN))kk=55;
  if(gpio_input_data_bit_read(GPIOE,key4_PIN))kk=56;
  exint_flag_clear(EXINT_LINE_5);
  exint_flag_clear(EXINT_LINE_6);
}
}
中断响应后两个键都复位,偷懒了,谢谢!比较好点的代码如下:
void EXINT9_5_IRQHandler(void){//EXINT9_5_IRQHandler//EXINT4_IRQHandler//EXINT15_10_IRQHandler
if(exint_flag_get(EXINT_LINE_5) != RESET){
  if(gpio_input_data_bit_read(GPIOE,key3_PIN))kk=55;
  exint_flag_clear(EXINT_LINE_5);
}else if(exint_flag_get(EXINT_LINE_6) != RESET){
  if(gpio_input_data_bit_read(GPIOE,key4_PIN))kk=56;
  exint_flag_clear(EXINT_LINE_6);
}
}

实验中的状况,EXINT9_5_IRQHandler中断响应非常慢,通常按键好几下才弹出键值,而EXINT0_IRQHandler、EXINT1_IRQHandler、EXINT2_IRQHandler一个键对应一个中断的响应相当快,按键出值。不知何因?希望讨论解决,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:永远好心情 [img]https://bbs.21ic.com/static/image/s

44

主题

218

帖子

1

粉丝