硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1063|回复: 5
收起左侧

[有问必答] 移植STM32-V4 BSP 版本按键例程,独立按键和复合按键同时触发问题

[复制链接]

14

主题

34

回帖

76

积分

初级会员

积分
76
发表于 2021-11-18 23:25:58 | 显示全部楼层 |阅读模式
int main(void)
{
       
        /*
                ST固件库中的启动文件已经执行了 SystemInit() 函数,该函数在 system_stm32f4xx.c 文件,主要功能是
        配置CPU系统的时钟,内部Flash访问时序,配置FSMC用于外部SRAM
        */
        bsp_Init();                /* 硬件初始化 */
        //EXTI_Config();
        PrintfLogo();        /* 打印例程名称和版本等信息 */
        PrintfHelp();        /* 打印操作提示 */
        bsp_StartAutoTimer(0,300);
        bsp_StartAutoTimer(1,1000);

        /* 主程序大循环 */
        while (1)
        {
                bsp_Idle();                /* CPU空闲时执行的函数,在 bsp.c */
       
                /* 摇杆左右键(上下键)控制LED流动 */
//                if (fRefresh)
//                {
//                        fRefresh = 0;

//                        #if 0        /* 可以用 printf打印数据到串口 */
//                                printf("count = %6d \r", count);
//                        #else        /* 也可以用 sprintf先输出到一个buf,然后在发送到串口 */
//                        {
//                                char buf[64];
//                                                               
//                                sprintf(buf, "count = %6d \r", count);
//                               
//                                comSendBuf(COM1, (uint8_t *)buf, strlen(buf));
//                        }
//                        #endif
//                }
               
                if (comGetChar(COM1, &read))
                {
                        switch (read)
                        {
                                case '1':
                                        bsp_LedToggle(1);
                                        printf("bsp_LedToggle(1)        \r\n");
                                        break;
                                case '2':
                                        bsp_LedToggle(2);
                                        printf("bsp_LedToggle(2)        \r\n");
                                        break;
                                case '3':
                                        bsp_LedToggle(3);
                                        printf("bsp_LedToggle(3)        \r\n");
                                        break;
                                case '4':
                                        bsp_LedToggle(4);
                                        printf("bsp_LedToggle(4)        \r\n");
                                        break;       
                                case '5':
                                        printf("MCU RESET!!        \r\n");
                                        bsp_DelayMS(2);
                                        __set_FAULTMASK(1);
                                        NVIC_SystemReset();
                                case '6':
                                        AutoPrint = 1;
                                        printf("AutoPrint = 1!!        \r\n");
                                        break;       
                                case '7':
                                        AutoPrint = 2;
                                        printf("AutoPrint = 2!!        \r\n");
                                        break;       
                                case '8':
                                        AutoPrint = 0;
                                        printf("AutoPrint = 0!!        \r\n");
                                        break;
                        }
                }
                if(bsp_CheckTimer(0) == 1)
                {
                        if(AutoPrint == 1)
                        {
                                bsp_LedToggle(1);
                                bsp_LedToggle(2);
                                bsp_LedToggle(3);
                                bsp_LedToggle(4);
                                SEGGER_RTT_printf(0,"bsp_CheckTimer(0)        \r\n");
                                printf("bsp_CheckTimer(0)        \r\n");
                        }
                }
                if(bsp_CheckTimer(1) == 1)
                {
                        if(AutoPrint == 2)
                        {
                                bsp_LedToggle(1);
                                bsp_LedToggle(2);
                                bsp_LedToggle(3);
                                bsp_LedToggle(4);
                                SEGGER_RTT_printf(0,"bsp_CheckTimer(1)        \r\n");
                                printf("bsp_CheckTimer(1)        \r\n");
                        }
                }
                /* 处理按键事件 */
                ucKeyCode = bsp_GetKey();
                if (ucKeyCode > 0)
                {
                        /* 有键按下 */
                        switch (ucKeyCode)
                        {
                                case KEY_1_DOWN:                /* K1独立按键 */
                                        AutoPrint = 1;
                                        printf("KEY_1_DOWN-----------\r\n");
                                        break;               
                               
                                case KEY_2_DOWN:                /* K2独立按键 */
                                        AutoPrint = 2;
                                        printf("KEY_2_DOWN = 2-----------\r\n");
                                        break;
                                case KEY_9_DOWN:                /* K1 K2组合按键 */
                                        AutoPrint = 0;
                                        printf("KEY_1_DOWN && KEY_2_DOWN-----------\r\n");
                                        break;

//                                case JOY_DOWN_U:                /* 摇杆UP键按下 */
//                                        count++;               
//                                        fRefresh = 1;
//                                        break;                               
//                               
//                                case JOY_DOWN_D:                /* 摇杆DOWN键按下 */
//                                        count--;
//                                        fRefresh = 1;
//                                        break;

//                                case JOY_DOWN_OK:                /* 摇杆OK键按下 */
//                                        break;               
//                               
                                default:
                                        break;
                        }
                }
        }
}




打印信息
KEY_2_DOWN = 2-----------
bsp_CheckTimer(1)
bsp_CheckTimer(1)
KEY_2_DOWN = 2-----------
bsp_CheckTimer(1)
KEY_1_DOWN-----------
KEY_1_DOWN && KEY_2_DOWN-----------
KEY_1_DOWN-----------
KEY_1_DOWN && KEY_2_DOWN-----------
KEY_1_DOWN-----------
KEY_1_DOWN && KEY_2_DOWN-----------
KEY_1_DOWN-----------
KEY_1_DOWN && KEY_2_DOWN-----------

只有两个按键,独立按K2 正常,但是独立按K1 会激活K1和K2复合按键,研究了一晚上。。。

回复

使用道具 举报

14

主题

34

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2021-11-18 23:26:22 | 显示全部楼层
大神帮忙看下啥问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-11-19 00:59:44 | 显示全部楼层
你倒腾的HAL版?

复制粘贴F4的即可使用。

【安富莱】V6,V5开发板用户手册,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至50章(2021-05-24)
http://www.armbbs.cn/forum.php?m ... 3255&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

14

主题

34

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2021-11-19 09:33:59 | 显示全部楼层
eric2013 发表于 2021-11-19 00:59
你倒腾的HAL版?

复制粘贴F4的即可使用。

杂交的放弃了,现在用的移植你之前的BSP库,只是MCU 有点弱,STM32F103C8型号的,都调试通了,就按键调试有问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-11-19 09:42:06 | 显示全部楼层
yijianshechuan 发表于 2021-11-19 09:33
杂交的放弃了,现在用的移植你之前的BSP库,只是MCU 有点弱,STM32F103C8型号的,都调试通了,就按键调试 ...

F1现在几百块一片,整不整意义不大了。
回复

使用道具 举报

14

主题

34

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2021-11-19 14:04:28 | 显示全部楼层
eric2013 发表于 2021-11-19 09:42
F1现在几百块一片,整不整意义不大了。

是现在价格相对以前确实贵的离谱,我们现在都换华大了,我是自己私下的案子家里一堆的st 食之有味弃之可惜想物尽其能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 05:10 , Processed in 0.268802 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表