keil5 仿真usart窗口没有限制_写项目第一步:装keil5软件,用板子点亮第一个led...

安装keil后记得添加pack

MDK5 Software Packs​www.keil.com
93bc2c2879c11e3e3d7a6d7e65a607ee.png

我的是f4 ,https://detail.tmall.com/item.htm?spm=a21wu.10013406.0.0.43037b04KWn3X8&id=524365759675 这块开发板

488d2348bb9f45909348ea0c3a14e830.png

下载好后在keil5的安装位置双击安装即可。

学习 STM32 最好的方法是用固件库,这里的固件库是指“STM32标准函数库”(STD库),关于库,有STD库和HAL库之分,好像新版的都使用HAL库,我这里鉴于条件原因,暂时先选择STD库·。

F4建议是不要使用串口下载,好像是说会更改寄存器什么的,然后后面就容易下载不进去。之前的串口下载助手是这样的,现在不知道有没有开发出合适的。

keil5打开工程出现:“Loading PDSC Debug 。。。”

参考:https://blog.csdn.net/weixin_40779546/article/details/81940587 可以解决。

然后直接打开野火的固件库的程序,先把点亮led的程序写进用dap方式写入开发板中,闪烁无误,说明没啥问题。

然后反手下个ad查看工程师这边的原理图,查看做出来的实验板上的的led接的是哪个io口,然后直接对源程序进行修改。

这里,我的LED2对应的是PA0端口,所以我直接修改程序为PA0,这里注意时钟总线上的也要根据手册进行相应的修改。

这里有个端口时钟的概念:

调用 RCC_AHB1PeriphClockCmd函数开启 GPIO端口时钟,使用 GPIO之前必须开启 对应端口的时钟。使用 RCC_APB2PeriphClockCmd函数开启 USART 时钟。

就比如:

#define LED1_GPIO_CLK             RCC_AHB1Periph_GPIOH
#define LED2_GPIO_CLK             RCC_AHB1Periph_GPIOH
#define LED3_GPIO_CLK             RCC_AHB1Periph_GPIOH
RCC_AHB1PeriphClockCmd ( LED1_GPIO_CLK| LED2_GPIO_CLK| LED3_GPIO_CLK, ENABLE); 

你要使用GPIOH上的端口,就要开启相应的时钟。而且配置的时候一般都是先配置时钟,然后再配置GPIO。这里使用 或操作 同时配置多个引脚

进入debug setting后显示:

swd/jtag communication failure(也就是说没有连接到设备)

然后尝试一直按复位键:可以找到设备了,但是下载时显示下面错误:

64b0b8ec5bdee795c059783027b0c82f.png

额,然后辗转反侧,发现原来是接线松了。这里由于是另外的工程师设计的swd接口,和野火的不一致,所以这里我用杜邦线接过去,以为黑胶布黏上就没啥问题了,结果还是出问题了。

期间还出现一下子找得到设备,一下子找不到的情况,所以我就觉得可能是线的问题,然后下载的时候按了一下就好了。

这里只用了4根线,rst线没接(这个可能是下载后自动重启的功能)。 3.3v-3.3v TMS-SWDIO TCL-SWCLK GND-GND

这样下来我的第一个led灯就可以闪烁了。

然后下面是我根据野火改编的程序:

main.c

#include "stm32f4xx.h"
#include "./led/bsp_led.h"

void Delay(__IO u32 nCount); 

int main(void)
{

	LED_GPIO_Config();

	while (1)
	{
		LED2( ON );			
		Delay(0xFFFFFF);
		LED2( OFF );		 
		Delay(0xFFFFFF);
	}
}

void Delay(__IO uint32_t nCount)	 
{
	for(; nCount != 0; nCount--);
}

bsp_led.c

#include "./led/bsp_led.h"   


void LED_GPIO_Config(void)
{		
		GPIO_InitTypeDef GPIO_InitStructure;
		RCC_AHB1PeriphClockCmd (LED2_GPIO_CLK, ENABLE); 															   
		GPIO_InitStructure.GPIO_Pin = LED2_PIN;	
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;    
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 
		GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
		LED_RGBOFF;		
}

bsp_led.h

#ifndef __LED_H
#define	__LED_H

#include "stm32f4xx.h"


#define LED2_PIN                  GPIO_Pin_0                 
#define LED2_GPIO_PORT            GPIOA                      
#define LED2_GPIO_CLK             RCC_AHB1Periph_GPIOA

#define ON  0
#define OFF 1

#define LED2(a)	if (a)	
					GPIO_SetBits(LED2_GPIO_PORT,LED2_PIN);
					else		
					GPIO_ResetBits(LED2_GPIO_PORT,LED2_PIN)


#define	digitalHi(p,i)			 {p->BSRRL=i;}		
#define digitalLo(p,i)			 {p->BSRRH=i;}		
#define digitalToggle(p,i)	 {p->ODR ^=i;}		

#define LED2_TOGGLE		digitalToggle(LED2_GPIO_PORT,LED2_PIN)
#define LED2_OFF			digitalHi(LED2_GPIO_PORT,LED2_PIN)
#define LED2_ON				digitalLo(LED2_GPIO_PORT,LED2_PIN)

					
#define LED_RGBOFF	LED2_OFF;

void LED_GPIO_Config(void);

#endif /* __LED_H */

OK,就到这里啦。

欢迎教练讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值