你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103除了PC13,PC14,PC15管脚,其余管脚均不可用

[复制链接]
zxkic 提问时间:2023-8-16 01:06 / 已解决
我买的STM32F103C8T6的最小系统板,才开始学习点亮LED灯,我跟着教学视频,把LED灯长脚与3.3V接入,短脚与GPIO连接,结果试了其他所有的管脚,就PC13,PC14,PC15能点亮,下面是我买的店铺的原理图,请大佬们帮忙看看到底咋回事吗?我看视频是直接连接,没有加什么电阻,我也直接连的,但是不亮

STM32F103C8T6原理图.pdf

下载

79.22 KB, 下载次数: 6, 下载积分: ST金币 -1

收藏 评论6 发布时间:2023-8-16 01:06

举报

6个回答
myxiexing 回答时间:2023-8-16 08:12:26

正常来说,还是要串入限流电阻。

如果外围电路没有问题,就是软件的问题,IO口时钟与配置是否正确。最好能将代码贴出来让人分析。

废鱼 回答时间:2023-8-16 09:32:48

先用万用表测试一下对应引脚的电压,另外需要注意配置对应IO的时钟源开启。需要软件配合LED进行配置。

butterflyspring 回答时间:2023-8-16 10:02:20
1. 先单独测试IO 口,看看是否能正常驱动高低。 如不能则检查代码和外部电路。
2. IO口驱动正常后,再连接LED灯。 根据LED的需要的电流和IO承受能力,选择相应的限流电阻。
    MCU的io驱动电流能力是有限的,可以查一下数据手册找到具体值。
zxkic 回答时间:2023-8-16 20:57:02
//#include "config.h"
#include "stm32f10x.h"

//LED
#define RCC_XXX_LED              RCC_APB2Periph_GPIOB
#define GPIO_XXX_LED_PORT        GPIOB
#define GPIO_XXX_LED             GPIO_Pin_12


//BEEP
#define RCC_XXX_BEEP              RCC_APB2Periph_GPIOB
#define GPIO_XXX_BEEP_PORT        GPIOB
#define GPIO_XXX_BEEP             GPIO_Pin_12

//共阳
#define LED_XXX_ON()         GPIO_ResetBits(GPIO_XXX_LED_PORT,GPIO_XXX_LED)  //点亮
#define LED_XXX_OFF()        GPIO_SetBits(GPIO_XXX_LED_PORT,GPIO_XXX_LED)  //熄灭

//共阳
#define BEEP_XXX_ON()         GPIO_ResetBits(GPIO_XXX_BEEP_PORT,GPIO_XXX_BEEP)  //点亮
#define BEEP_XXX_OFF()        GPIO_SetBits(GPIO_XXX_BEEP_PORT,GPIO_XXX_BEEP)  //熄灭


void Delay(u16 time)
{
    u16 i=0;
    while(time--)
    {
        i=12000;
        while(i--);
    }
}
void LED_Init(void)  
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_XXX_LED, ENABLE);   //使能PD端口时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_XXX_LED;               //端口设置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure); 
  LED_XXX_OFF();

}

void BEEP_Init(void)  
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_XXX_BEEP|RCC_APB2Periph_AFIO, ENABLE);   //使能PD端口时钟
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_XXX_BEEP;               //端口设置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure); 
  BEEP_XXX_OFF();

}
int main()
{
    LED_Init();
        //BEEP_Init();
    while(1){
            LED_XXX_ON();
            //BEEP_XXX_ON();
            Delay(500);
            LED_XXX_OFF();
            //BEEP_XXX_OFF();
            Delay(500);

        }       
}
zxkic 回答时间:2023-8-16 21:00:40

myxiexing 发表于 2023-8-16 08:12
正常来说,还是要串入限流电阻。</p>
<p>如果外围电路没有问题,就是软件的问题,IO口时钟与配置是否正确。最 ...

[md]大佬可以帮忙看看这个代码吗?我LED可以亮,但是BEEP的那个管脚就不行

//#include "config.h"
#include "stm32f10x.h"

//LED
#define RCC_XXX_LED              RCC_APB2Periph_GPIOC
#define GPIO_XXX_LED_PORT        GPIOC
#define GPIO_XXX_LED             GPIO_Pin_13


//BEEP
#define RCC_XXX_BEEP              RCC_APB2Periph_GPIOB
#define GPIO_XXX_BEEP_PORT        GPIOB
#define GPIO_XXX_BEEP             GPIO_Pin_12

//共阳
#define LED_XXX_ON()         GPIO_ResetBits(GPIO_XXX_LED_PORT,GPIO_XXX_LED)  //点亮
#define LED_XXX_OFF()        GPIO_SetBits(GPIO_XXX_LED_PORT,GPIO_XXX_LED)  //熄灭

//共阳
#define BEEP_XXX_ON()         GPIO_ResetBits(GPIO_XXX_BEEP_PORT,GPIO_XXX_BEEP)  //点亮
#define BEEP_XXX_OFF()        GPIO_SetBits(GPIO_XXX_BEEP_PORT,GPIO_XXX_BEEP)  //熄灭


void Delay(u16 time)
{
    u16 i=0;
    while(time--)
    {
        i=12000;
        while(i--);
    }
}
void LED_Init(void)  
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_XXX_LED, ENABLE);   //使能PD端口时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_XXX_LED;               //端口设置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;               //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure); 
  LED_XXX_OFF();

}

void BEEP_Init(void)  
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_XXX_BEEP, ENABLE);   //使能PD端口时钟
        //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_XXX_BEEP;               //端口设置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;               //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure); 
  BEEP_XXX_OFF();

}
int main()
{
    LED_Init();
                BEEP_Init();
    while(1){
                        LED_XXX_ON();
                        BEEP_XXX_ON();
                        Delay(500);
                        LED_XXX_OFF();
                        BEEP_XXX_OFF();
                        Delay(500);

                }                
}
zxkic 回答时间:2023-8-16 21:07:35

解决了,我发现我初始化GPIO_Init的时候,用的固定值,不是设定的GPIO_XXX_LED_PORT

GPIO_XXX_BEEP_PORT

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版