裸机C编程中闪烁的Led:STM32L476RG核子板
我尝试在STM32L476RG核子板上实现一个经典的闪烁示例 根据STM32L4x数据表:LD2连接到GPIOA端口5(PA5)。 PA5使用AHB2总线 注意:我使用了Keil uVision 5;我用STM32L476RGTx目标创建了一个新的uVision项目。 在“管理运行时环境”对话框中,我选择了:裸机C编程中闪烁的Led:STM32L476RG核子板,c,arm,microcontroller,stm32,cortex-m,C,Arm,Microcontroller,Stm32,Cortex M,我尝试在STM32L476RG核子板上实现一个经典的闪烁示例 根据STM32L4x数据表:LD2连接到GPIOA端口5(PA5)。 PA5使用AHB2总线 注意:我使用了Keil uVision 5;我用STM32L476RGTx目标创建了一个新的uVision项目。 在“管理运行时环境”对话框中,我选择了: CMSIS>>核心(标志) 设备>>启动(标志) 代码如下: #include "stm32l4xx.h" // Device header //#inc
#include "stm32l4xx.h" // Device header
//#include <stdint.h>
//#define MASK(x) ((uint32_t) (1<<(x))) // bitmasking
void delayMs(int delay);
int main(void){
// RCC->AHB2RSTR |=1;
// RCC->AHB2RSTR &=~1;
// RCC->AHB2ENR |= MASK(0); //bitwise OR. Enable GPIOA clock
RCC->AHB2ENR |= 1;
//GPIOA->MODER |= MASK(10);
GPIOA->MODER |= 0x400;
while(1){
//GPIOA->ODR |= MASK(4);
GPIOA->ODR |= 0x20;
delayMs(500);
//GPIOA->ODR &= ~MASK(4);
GPIOA->ODR &= ~0x20;
delayMs(500);
}
}
void delayMs(int delay){
int i;
for(;delay>0; delay --){
for (i=0; i<3195;i++);
}
}
当我下载它时,Keil uV 5返回:
Load "C:\\Users\\gmezz\\OneDrive\\Documenti\\Bare_Metal\\Blinknew\\Objects\\blinknew.axf"
Erase Done.
Programming Done.
Verify OK.
Flash Load finished at 22:37:52
LED应闪烁1秒,但实际上什么也没发生
老实说,我不明白出了什么问题
有人能帮我吗
GMI可能错误,但根据参考手册(RM0351)第6.2.19节,在启用外围时钟后,在访问其寄存器之前,应等待2个时钟周期。尝试在RCC->AHB2ENR |=1之后引入一个短延迟;线在您的情况下,我认为MODER寄存器没有得到正确的值
我还建议用调试器检查寄存器的实际值。这个程序发生了什么?你有什么问题?你有生成错误吗?运行时出现意外结果?跑步时撞车?请阅读或刷新,以及。问题已被编辑。GMI恐怕您必须阅读目标公司的文档,并学习如何设置和重置端口引脚。顺便说一句,您的Keil IDE应该有一些例子,至少几年前我尝试µVision时是这样。IIRC它被称为“blinky”,它可以做你正在尝试的事情。我解决了读取寄存器的问题。GPIOA_MODER的重置值为0xABFFFF,因此我不能像代码中那样使用位运算符。我需要放0xABFFF7FF,来设置PA5的方向。啊,我错过了那个。在重置MODER寄存器的值时,L系列似乎不同于F系列。
Load "C:\\Users\\gmezz\\OneDrive\\Documenti\\Bare_Metal\\Blinknew\\Objects\\blinknew.axf"
Erase Done.
Programming Done.
Verify OK.
Flash Load finished at 22:37:52