本帖最后由 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,这个简单。
先谢谢了。
|