其他分享
首页 > 其他分享> > 用STM32cubemx生成keil工程完成流水灯和串口通信

用STM32cubemx生成keil工程完成流水灯和串口通信

作者:互联网

目录

一、使用STM32cubemx生成keil工程

1.1、下载STM32cubemx

1.2、创建新工程

1.3、初始化配置

 1.4、工程导出

 二、keil中完善和仿真

2.1完善功能

2.2仿真波形 

2.3烧录演示

三、stm32usart串口通信

3.1、要求:

3.2、烧录

四、 总结

五、参考文献


一、使用STM32cubemx生成keil工程

1.1、下载STM32cubemx

可以去官网注册然后下载: https://www.java.com/en/download/manual.jsp

详细步骤参考:(53条消息) 【STM32】STM32 CubeMx使用教程一--安装教程_Z小旋-CSDN博客_stm32cubemx安装

最好下载最新版本的,然后下载需要的芯片,本次我下载的是stm32f1

1.2、创建新工程

打开安装好的stm32cubemx,创建一个新工程

选择刚刚自己下载的芯片,然后双击右下方的Board就可以出现芯片了:

1.3、初始化配置

 开始对芯片的管脚和时钟进行初始化配置,管脚可以根据自己的需求选择,这里选择的

PA4\PA5\PA6:(如图所示,PA5\PA6同PA4一样操作)

 

 然后配置时钟,选择晶振:

 然后将时钟树中间的8mhz改成72mhz并回车:(回车之后弹出的东西直接选ok)

 配置完成后:

 注意:配置完成后可以关注一下如下图所示的地方,如果是绿色则表示没有问题如果是黄色(警告)或者红色(错误)就需要重新配置调整。

 1.4、工程导出

在project Manager中写出需要的工程名和保存的地址,还有配置其他内容:

 

 然后点击 GENERATE CODE 导出工程,生成keil工程:

 二、keil中完善和仿真

2.1完善功能

找到当时在stm32cubemx中保存的路径,找到keil文件然后打开它,可以看见工程中已经有很多文件了:

 找到gpio.c和main.c并点开浏览一下,然后在main函数中的while中添加如下代码:

		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//A0灯亮
		HAL_Delay(500);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);	//A0灯灭,同时B0亮
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
		HAL_Delay(500);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);	//B0灯灭,同时C15灯亮
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);
		HAL_Delay(500);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//C15灯灭然后开始循环

结果如图:

2.2仿真波形 

和上一个博客相同,首先点击锤子,然后点击debug,选择use simulator就可以开始仿真了

 然后调出逻辑窗口添加管脚号:

 

 开始仿真得到波形图:

2.3烧录演示

然后就可以烧录了,将板子与电脑相连,使用FLYMCU进行烧录:

 

三、stm32usart串口通信

3.1、要求:


(1)设置波特率为115200,1位停止位,无校验位。
(2)STM32系统给上位机(win10)连续发送“hello windows!”,上位机接收程序可以使用“串口调试助手“,也可自己编程。
(3)当上位机给stm32发送“Stop,stm32”后,stm32停止发送。

main.c

#include "stm32f10x.h"
void Delay_ms(volatile unsigned int t)	
{
	unsigned int i,n;
	for(n=0;n<t;n++)
		for(i=0;i<800;i++);
}

void SysTick_Handler(void)
{
}


//中断服务函数,前面在User_USART.c  void User_USART_Config(void)函数中
//USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);使能了数据接收中断,所以
//将处理接收数据时的中断服务
	int i=0;
	uint8_t a[11];
void USART1_IRQHandler(void)
{

	//uint8_t temp;
	
	
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
	{
		a[i++] = USART_ReceiveData(USART1);
		//USART_SendData(USART1, a[i-1]);
			

	}
	if(a[0]=='S'&&a[1]=='t'&&a[2]=='o'&&a[3]=='p'&&a[4]==','&&a[5]=='s'&&a[6]=='t'&&a[7]=='m'&&a[8]=='3'&&a[9]=='2')
		while(1);
}
void User_USART_Send_Byte(USART_TypeDef* pUSARTX, uint8_t Data)
{

	//向数据寄存器写入8bit数据
	pUSARTX->DR = (Data & (uint16_t)0x01FF);	

	//USART_GetFlagStatus检查数据是否发送完成
	while(USART_GetFlagStatus(pUSARTX, USART_FLAG_TXE) == RESET);
	
}


//向串口发送一个字符串数据,即可以发送包含多个字节的数据,char类型为8bit,其字符串中的每个字符都可用一个int数表示,即ASCII标准
void User_UART_Send_String(USART_TypeDef* pUSARTX, char* str)
{
  unsigned int i = 0;
	do	
	{
		User_USART_Send_Byte(pUSARTX, *(str + i));
		i++;
	}
	while(*(str+i)!='\0');

		//USART_GetFlagStatus检查多个数据是否发送完成
		while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  

	{

}

int main(void)
{
	User_USART_GPIO_Config();
	User_NVIC_Config();
	User_USART_Config();

	User_UART_Send_String(USART1, "abcdefg!\n");

	while(1)
	{
     User_UART_Send_String(USART1, "hello windows!\n");
     Delay_ms(5000);
	}

}

3.2、烧录

将改好的程序仿真后烧录进芯片中(用FLYMCU)

 运行成功后,打开野火多功能调试助手运行(首先要下载一个压缩包,然后解压就可以直接运行了),点击打开串口,就会发现芯片一直在发送hello,window

 

四、 总结

     用STM32CubeMx直接生成工程是真的方便了很多,免去了很多我们很多的精力,通过这个实验差不多能比较熟练的使用stm32cubemx。

五、参考文献

(53条消息) STM32USART串口通信_txmnQAQ的博客-CSDN博客

(53条消息) STM32串口通讯发送hello windows_eininbebop的博客-CSDN博客

(53条消息) STM32的USART串口通信_m0_47159351的博客-CSDN博客

 

标签:烧录,HAL,PIN,USART,keil,STM32cubemx,串口,GPIO
来源: https://blog.csdn.net/qq_53072511/article/details/120985471