在stm32f103c8t6中启用输出端口

在stm32f103c8t6中启用输出端口,c,embedded,stm32,cortex-m3,C,Embedded,Stm32,Cortex M3,我正在尝试启用连接到LED的蓝色药丸(stm32f103c8t6)中的PC13,不确定它是低电平激活还是高电平激活,因此我尝试了这两种方式,但仍然无法工作。 RCC->APB2ENR |=0x10 用于启用端口C中的时钟。 GPIOC->CRH=(GPIOC->CRH&0xFF0FFFFF)| 0x00100000 用于将端口C配置为输出模式和推拉模式。 GPIOC->ODR&=!(1CRH=(GPIOC->CRH&0xFF0FFFFF)| 0x00100000; 而(1){ GPI

我正在尝试启用连接到LED的蓝色药丸(stm32f103c8t6)中的PC13,不确定它是低电平激活还是高电平激活,因此我尝试了这两种方式,但仍然无法工作。

RCC->APB2ENR |=0x10
用于启用端口C中的时钟。




GPIOC->CRH=(GPIOC->CRH&0xFF0FFFFF)| 0x00100000
用于将端口C配置为输出模式和推拉模式。




GPIOC->ODR&=!(1CRH=(GPIOC->CRH&0xFF0FFFFF)| 0x00100000;
而(1){

GPIOC->ODR=~(1如果你在评论中说你正在运行Keil,那么很肯定你正在使用ST HAL。 因此,你应该使用它

使用此选项启用GPIOC时钟

__GPIOC_CLK_ENABLE();
听起来你好像还没有启用另一个时钟。我现在无法确定它是哪一个,但它可能在链中处于较高的位置。(这可能是因为你使用
APB2ENR
而不是宏启用了时钟)

另一个解决方案是使用ST证明的多平台工具为几个IDE创建基本初始化项目

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


您的根本问题是您没有在配置中启用
重置和运行
。因此,在编程后,需要在新闪现的代码运行之前重置电路板。启动调试器可以做到这一点

这个配置可以在实用工具->设置菜单中找到。(忽略红色标记,我自己无法捕获图像,因此是从internet获取的)


如果在“int”之前使用“volatile”,它将工作

您使用的HAL或SPL是什么?在
stm32f10x.h
中是否有对GPIO起作用的函数?
是逻辑求反运算符,将结果设置为1或0。改用按位NOT运算符,即
~
@Coddo,是的,对,我不知道我怎么错过了这个lol,我编辑问题中的代码。但仍然是同一个问题。@Tarick Welling,我不确定,我的代码加载在0x08000370中,前面有很多指令,所以我猜在我的代码之前执行了一些函数。我正在使用uVision编译和闪存。经过一些调查,我发现如果运行调试会话,可能是软件问题?还是调试代码设置了我没有设置的东西?正如我所说,我正在使用uVision进行编译和闪存。感谢STM32CubeMX,它非常有用。我还意识到按下蓝色药丸中的重置按钮解决了问题。@0xDEADC0DE,傻我,这就是问题。你向你闪存了r代码,但未在keil中的闪光器设置中启用闪烁时重置,因此它不会在闪烁后重置电路板,并在调试会话开始时重置
__GPIOC_CLK_ENABLE();