在stm32f103c8t6蓝色药丸中启用输出端口

问题描述 投票:1回答:1

我正在尝试在连接到LED的蓝色药丸(stm32f103c8t6)中启用PC13,不确定是低电平有效还是高电平有效,因此我尝试了两种方法都仍然无效。RCC->APB2ENR |= 0x10;用于启用端口C中的时钟。enter image description hereGPIOC->CRH = (GPIOC->CRH & 0xFF0FFFFF) | 0x00100000;用于将端口C配置为输出模式和推挽式。enter image description hereGPIOC->ODR &= !(1<<13);用于将C13引脚驱动为低电平。整个代码:

#include "stm32f10x.h"

int main(){
    RCC->APB2ENR |= 0x10;
    GPIOC->CRH = (GPIOC->CRH & 0xFF0FFFFF) | 0x00100000;  
    while(1) {
        GPIOC->ODR = ~(1<<13);//if it is Active Low
        for (int i = 0; i < 1000000; ++i) __asm__("nop");
        GPIOC->ODR |= 1<<13; //if it is Active High
        for (int i = 0; i <  500000; ++i) __asm__("nop");
    }

}

编辑:经过一番调查,我发现如果运行调试会话,代码可以正常运行,这可能是软件问题吗?还是调试代码设置了我没有的东西?如我所说,我正在使用uVision进行编译和刷新。

c embedded stm32 cortex-m3
1个回答
0
投票

如果您按照评论中的说明运行Keil,则可以肯定使用的是ST HAL。因此,您应该使用它。

使用此来启用GPIOC时钟

__GPIOC_CLK_ENABLE();

听起来您还没有启用其他时钟。我目前无法确定是哪一个,但可能在链中排名靠前。 (这可能是因为您使用APB2ENR而不是宏启用了时钟)

另一种解决方案是使用STM32CubeMX,这是ST证明的一种多平台工具,可以为多个IDE创建基础初始化的项目。

下载并运行它,为您的MCU创建一个项目,添加要驱动的引脚作为输出,并生成一个应编译并运行的Keil项目。如果可行,则可以对STM32CubeMX创建工作代码所采取的步骤进行逆向工程。

© www.soinside.com 2019 - 2024. All rights reserved.