一、搭载stm32的开发环境即安装STM32CubeMX

1、安装jdk

由于STM32CubeMX是Java实现的,需要安装jdk环境.

二、利用CubeMX新建工程点亮LED灯

1、新建工程

 (1)新建工程,选择自己需要的型号

cubemx安装后打不开_cubemx安装后打不开

 (2) 调式sys接口

cubemx安装后打不开_cubemx安装后打不开_02

(3) 配置引脚,根据上一篇keil5配置引脚,只需要将PA1,PB0,PB5设置为GPIO_Out就行。

 

cubemx安装后打不开_cubemx安装后打不开_03

(4) 时钟源配置

默认时钟是使用内部RC振荡器。 

cubemx安装后打不开_单片机_04

图示地方改为72回车。

cubemx安装后打不开_cubemx安装后打不开_05

(5)工程管理

所有命名中不要出现中文

cubemx安装后打不开_arm_06

左上角点击Code Generator ,进行下一步配置。

cubemx安装后打不开_stm32_07

 右上角点击GENERATE CODE 创建工程,打开工程文件

cubemx安装后打不开_嵌入式硬件_08

 

cubemx安装后打不开_cubemx安装后打不开_09

2、新建代码

1、代码如下

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
	  HAL_Delay(1000);

	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
	  HAL_Delay(1000);
	  
	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
	  HAL_Delay(1000);

 在main.c文件的main函数下的while循环中,添加上方面几行代码即可。

cubemx安装后打不开_嵌入式硬件_10

2、编译烧录代码

编译运行没有报错就烧录代码。

cubemx安装后打不开_stm32_11


3、结果展示

cubemx安装后打不开_stm32_12

 三、MDK5 观察3个GPIO端口的输出波形

1、设置仿真模式

cubemx安装后打不开_单片机_13

2、编译运行没有错误

cubemx安装后打不开_单片机_14

3、调式会话

cubemx安装后打不开_cubemx安装后打不开_15

4、打开逻辑分析仪

cubemx安装后打不开_arm_16

5、点击setup给逻辑分析仪中添加要观察的IO口

cubemx安装后打不开_arm_17

 

新建输入PORTA.,PORTB.出来目标端口,并且设置Display Type为Bit

cubemx安装后打不开_单片机_18

 

 

cubemx安装后打不开_嵌入式硬件_19

 仿真图如图所示:

cubemx安装后打不开_嵌入式硬件_20

 

四、 串口通信,发送Hello Windows示例

安装驱动软件,要将J-link连接在电脑上才可以安装上。

cubemx安装后打不开_cubemx安装后打不开_21

 

安装好了检查设备管理器是否有端口。

cubemx安装后打不开_stm32_22

 

有端口之后可以参考上方STM32CubeMX代码编写,也可以直接编写。

编译运行没有错误之后烧录至芯片中。

代码参考如下:

usart.c下代码

在SYSTEM组下双击usart.c,uart_init函数

void uart_init(u32 pclk2,u32 bound)
{  	 
	float temp;
	u16 mantissa;
	u16 fraction;	   
	temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
	mantissa=temp;				 //得到整数部分
	fraction=(temp-mantissa)*16; //得到小数部分	 
    mantissa<<=4;
	mantissa+=fraction; 
	RCC->APB2ENR|=1<<2;   //使能PORTA口时钟  
	RCC->APB2ENR|=1<<14;  //使能串口时钟 
	GPIOA->CRH&=0XFFFFF00F;//IO状态设置
	GPIOA->CRH|=0X000008B0;//IO状态设置 
	RCC->APB2RSTR|=1<<14;   //复位串口1
	RCC->APB2RSTR&=~(1<<14);//停止复位	   	   
	//波特率设置
 	USART1->BRR=mantissa; // 波特率设置	 
	USART1->CR1|=0X200C;  //1位停止,无校验位.
#if EN_USART1_RX		  //如果使能了接收
	//使能接收中断 
	USART1->CR1|=1<<5;    //接收缓冲区非空中断使能	    	
	MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级 
#endif
}

 在test.c中编写如下代码:

#include "sys.h"
#include "usart.h"		
#include "delay.h"	 
int main(void)
{				 
	u16 t; u16 len; u16 times=0;
	Stm32_Clock_Init(9);	//系统时钟设置
	delay_init(72);	  		//延时初始化
	uart_init(72,115200); 	//串口初始化为115200
  	while(1)
	{
		if(USART_RX_STA&0x8000)
		{ 
			len=USART_RX_STA&0x3FFF;//得到此次接收到的数据长度
			printf("\r\n Hello Windows! \r\n\r\n");
			for(t=0;t<len;t++)
			{
				USART1->DR=USART_RX_BUF[t];
				while((USART1->SR&0X40)==0);//等待发送结束
			}
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}else
		{
			times++;
			if(times%200==0)printf("Hello Windows!\r\n"); 
			delay_ms(10); 
		}
	}	 
}

 编译后成功烧录

cubemx安装后打不开_stm32_23

 

 五、根据上方事例,观察PA9、PA10波形

cubemx安装后打不开_单片机_24