OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 907|回复: 4

有人能帮忙看看这个stm32的4*4代码哪里有错吗,我硬件不反应

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2024-2-21
在线时间
4 小时
发表于 2024-2-21 23:57:23 | 显示全部楼层 |阅读模式
1金钱
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
uint8_t MatrixKey_determine(void);

void MatrixKey_Init(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
       
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

       
}

uint8_t MatrixKey_GetValue(void)
{
        uint8_t Key;
       
        GPIO_ResetBits(GPIOB, GPIO_Pin_15);
        GPIO_SetBits(GPIOB, GPIO_Pin_14);
        GPIO_SetBits(GPIOB, GPIO_Pin_13);
        GPIO_SetBits(GPIOB, GPIO_Pin_12);

        Key =  MatrixKey_determine();
       
        GPIO_ResetBits(GPIOB, GPIO_Pin_14);
        GPIO_SetBits(GPIOB, GPIO_Pin_15);
        GPIO_SetBits(GPIOB, GPIO_Pin_13);
        GPIO_SetBits(GPIOB, GPIO_Pin_12);
       
        if(MatrixKey_determine())
        {
                Key = MatrixKey_determine() + 4;
        }
       
        GPIO_ResetBits(GPIOB, GPIO_Pin_13);
        GPIO_SetBits(GPIOB, GPIO_Pin_15);
        GPIO_SetBits(GPIOB, GPIO_Pin_14);
        GPIO_SetBits(GPIOB, GPIO_Pin_12);
       

        if(MatrixKey_determine())
        {
                Key = MatrixKey_determine() + 8;
        }
       
        GPIO_ResetBits(GPIOB, GPIO_Pin_12);
        GPIO_SetBits(GPIOB, GPIO_Pin_15);
        GPIO_SetBits(GPIOB, GPIO_Pin_14);
        GPIO_SetBits(GPIOB, GPIO_Pin_13);
       
       
        if(MatrixKey_determine())
        {
                Key = MatrixKey_determine() + 12;
        }
       
        return Key;
}

uint8_t MatrixKey_determine(void)
{
        uint8_t Key = 0;
        if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11) == 0)
        {
                Delay_ms(10);
                if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11) == 0){Key = 4;}
        }
       
        if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10) == 0)
        {
                Delay_ms(10);
                if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_10) == 0){Key = 3;}
        }
       
        if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9) == 0)
        {
                Delay_ms(10);
                if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9) == 0){Key = 2;}
        }
       
        if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == 0)
        {
                Delay_ms(10);
                if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == 0){Key = 1;}
        }
        return Key;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2024-2-22 09:55:17 | 显示全部楼层
专治疑难杂症
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2024-2-21
在线时间
4 小时
 楼主| 发表于 2024-2-22 12:03:31 | 显示全部楼层
不是main的问题,我把端口换成pa0到pa7就能用,但是换到这个端口就不能用了。但是我现在pa0到pa7被占了,只能用这个端口。
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2024-2-22 13:17:46 | 显示全部楼层
若要回复我就点击我所在楼层的"回复",否则变成了回复自己.
GPIOB的RCC时钟未使能.
专治疑难杂症
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2024-2-21
在线时间
4 小时
 楼主| 发表于 2024-2-22 17:37:23 | 显示全部楼层
LcwSwust 发表于 2024-2-22 13:17
若要回复我就点击我所在楼层的"回复",否则变成了回复自己.
GPIOB的RCC时钟未使能.

好的,谢谢,成了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 10:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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