首页 > 编程知识 正文

stm32开关控制led,如何让单片机灯闪烁

时间:2023-05-06 15:26:13 阅读:48151 作者:3597

本文介绍如何使用keil从零开始一个简单的STM32项目,然后闪烁指示灯以显示给kwdjm。

第零步当然,首先必须有STM32的板子。 那个IO口连接着LED。

第一步,创建文件夹0.0

打开第二步,keil,启动项目

在显示的对话框中选择您的STM32芯片。

如果在接下来出现的对话框中选择“是”,keil会为您创建启动文件。

第三步,创建新的main.c文件并将其添加到项目中。

单击“新建”按钮创建文本文件。

在创建的文本文件中输入c的main函数

点击保存

保存后,向项目中添加文件

第四步,点击编译

可以看到keil报告了错误

错误消息没有定义名为SystemInit的符号。 这是因为在启动文件中调用了SystemInit函数,但未定义如下图所示。

可以暂时忽略上述启动文件中装配的含义,只需将函数添加到main.c中即可消除错误。

修改并编译后,程序没有报告错误。 至此,一个STM32的工程完成了。

第五步

#defineperiph_base(unsignedint )0x40000000 ) define AP B2 per iph _ base0x 10000 ) definegpioa _ base dfinine ase ) APB2perIPH_base0x1000 ) definegpiod_base ) APB2perIPH_base0x1000 ) ) definegpiod _ b definegpioe _ base (AP B20x1c00 ) definegpiog_base ) APB2perIPH_base0x1c00 ) definegpiog _ base dfinegpioa _ ODR _ addr (gpioa _ base 12 )/0000x 40010 c0c0x 4001100 c# definegpiod _ ODR _ addr (gpiod _ base 12 )/0x 4001140 c # definegpioe _ ODR _ addr ) gpioe _ base 1140 definegpiog_ODR_addr ) gpiog_base12 )/0x 40011 e0c bit num ((addr0x f 000000 )0x2000000 ) ) addr0xfffff )5) bitnum2 definemem_addr ) ) volatileunsignence efineled0mem _ addr (bit band (gpioa _ ODR _ addr,8 ) )/#defineled0* () volatile unsigned int CFGR; volatile unsigned int CIR; volatile unsigned int APB2RSTR; volatile unsigned int APB1RSTR; volatile unsigned int AHBENR; volatile unsigned int APB2ENR; volatile unsigned int APB1ENR; volatile unsigned int BDCR; volatile unsigned int CSR; } RCC_TypeDef; #defineRCC(RCC_typedef* )0x40021000 ) typedef struct { volatileunsignedintcrl; volatile unsigned int CRH; volatile unsigned int IDR; volatile unsigned int ODR; volatile unsigned int BSRR; volatile unsigned int BRR; volatile unsigned int LCKR; } GPIO_TypeDef; #definegpioa(gpio_typedef* ) gpioa _ base (voidledinit ) void ) {RCC-APB2ENR|=12; //GPIOA时钟接通GPIOA-CRH=0XFFFFFFF0; GPIOA-CRH|=0X00000003; //void delay _ ms (volatileunsignedintt ) ) {unsigned int i,n; for(n=0; nt; n ) for(I=0; i800; I; }intmain(void ) ) {LEDInit ); wile(1) {LED0=0; elay_ms(500; LED0=1; elay_ms(500; }语音系统(语音) }

下一段是代码的简单说明,但不需要解释得太深。

/

STM32 GPIO输出高低电平的完整流程如下。

配置时钟配置IO口IO口输出高地电平

1,STM32的时钟可以PLL。 但是,为了简化操作,这里不放置,只使用默认时钟——内部8MZH振荡器。

2、从硬件上看,我的LED灯与PA8连接。 那么,怎么控制PA8?

STM32不能像单片机一样立即操作IO端口。 要操作STM32上的IO端口,请先配置IO端口。

语音识别(语音) )

{

RCC-APB2ENR|=12;

GPIOA-CRH=0XFFFFFFF0;

GPIOA-CRH|=0X00000003;

}

其中RCC-APB2ENR|=12; 这是启用GPIOA的时钟。 如果是启用GPIOB的时钟,则RCC-APB2ENR|=13; 其他用这个类推。

GPIOA-CRH=0XFFFFFFF0;

GPIOA-CRH|=0X00000003;

将PA8配置在推挽输出、50MHZ处。

设定PA9时:

GPIOA-CRH=0XFFFFFF0F;

GPIOA-CRH|=0X00000030;

另外,如果是PA0~PA7,则将CRH变更为CRL即可。

如果要设置其他GPIO端口,请将GPIOA更改为GPIOB、GPIOC。 没关系。

据了解,3,51单片机可以单独控制各个IO端口。 STM32也可以做。 该机制称为Bit-Bond。

参照 《Cortex-M3权威指南》 ,可知只要找到PA8输出寄存器的Bit-Bond中的地址,就可以操作PA8的输出。 地址的计算方法如下图所示。

《Cortex-M3权威指南》 还介绍了如何定义c语言宏,可以直接使用。

/

输入上述代码后,打开配置选项并配置为:

选中Create HEX File

选择J-Link下载工具

再build一次,下载就完了。

综上可知,如果不配置STM32的PLL,对于51单片机,STM32闪烁LED灯仅增加了一个将GPIO端口作为输出进行配置的步骤。

转载于:https://www.cn blogs.com/weynechen/p/4846792.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。