(嵌入式系统开发)stm32CubeMX环境配置,配合keil使用寄存器点灯

本篇文章主要介绍如何安装STM32CubeMX及STM32CubeMX配合keil完成

1、做一个LED流水灯,用GPIO端口完成3只LED红绿灯的周期闪烁。

2、完成一个STM32的USART串口通讯程序,要求:

1)设置波特率为115200,1位停止位,无校验位;

2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。

目录

一、STM32CubeMX的安装与环境装

1.STM32CubeMX的安装

1.安装java 环境

2.安装STM32CubeMX

3.安装HAL库

 2.用STM32CubeMX生成工程文件并配置环境

1.建立工程

2.界面简介

3.时钟配置

4.管脚配置

5.工程管理

 二、流水灯

1.代码编写

2.烧录运行

三、串口通信

1.准备

2.代码编写

3.串口助手观察输出

4.文件自取

四、参考网站:


一、STM32CubeMX的安装与环境装

1.STM32CubeMX的安装

安装CubeMx一共需要三个

  •  JRE (Java Runtime Environment)  Java运行环境 运行JAVA程序所必须的环境的集合
  •  STM32CubeMX
  • HAL库   STM32 HAL固件库   ST官方推出的另一套库 

具体的安装流程可以看

【STM32】STM32 CubeMx使用教程一--安装教程_Z小旋-CSDN博客_stm32cubemx安装

非常简单 只有几步 也没什么要设置的 我就不多赘述了

1.安装java 环境

由于 STM32CubeMX 软件是基于 JAVA 环境运行的,所以需要安装 JRE (Java Runtime Environment)才能使用, 

官网:  https://www.java.com/en/download/manual.jsp

2.安装STM32CubeMX

 官网:www.st.com/stm32cubemx

3.安装HAL库

首先肯定很多人会问什么是HAL固件库?

STM32 HAL固件库是Hardware Abstraction Layer的缩写,中文名称是:硬件抽象层。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,为更方便的实现跨STM32产品的最大可移植性。HAL库的推出,可以说ST也慢慢的抛弃了原来的标准固件库,这也使得很多老用户不满。但是HAL库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等

和标准库对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在STM32系列MCU之间无缝移植,甚至在其他MCU也能实现快速移植。

并且从16年开始,ST公司就逐渐停止了对标准固件库的更新,转而倾向于HAL固件库和 Low-layer底层库的更新,停止标准库更新,也就表示了以后使用STM32CubeMX配置HAL/LL库是主流配置环境;

打开安装好的 STM32CubeMX 软件  点上面的Help -> Manage embedded software packages 

 会跳出来一个选择型号界面   勾选上你要安装的HAL库, 点击“Install Now” 直到安装成功 

 

 2.用STM32CubeMX生成工程文件并配置环境

1.建立工程

在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR

 然后选择芯片 这里我选择的是STM32F103RC 形式我选择的是LQFP64

2.界面简介

左侧1:MCU外设资源选择

在这里可以选择MCU的各种资源和外设

提供两种方式

  • Categories  种类选择

将MCU的各种外设和资源分类,供用户选择使用

  • A-Z  顺序选择

MCU的外设资源按A-Z 排序,供用户选择使用

右侧2为预览界面

这里分为引脚预览系统预览

引脚预览可以查看引脚配置了什么功能,和各个引脚的位置;
任意点击一个引脚即可设置该引脚的各种功能。

    这种颜色表示不可配置引脚  电源专用引脚以黄色突出显示。其配置不能更改

这种颜色表示你配置了一个I/O口的功能,但是没有初始化相对应的外设功能  引脚处于no mode 状态  

  绿色表示配置成功

3.时钟配置

配置RCC使用外部时钟源,选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)

  选择 Clock Configuration,配置系统时钟 SYSCLK 为 72MHz  然后回车

点击ok 

修改 HCLK 的值为 72 后,输入回车,软件会自动修改所有配置

4.管脚配置

只需把目标LED对应引脚设置为GPIO_Output即可,按照我在之前篇博客的管脚分配,这里我仍然去选择相同管脚,即PB6 PC6 PD2

5.工程管理

 设置完MCU后,可以进行对工程文件的配置了。
在Project处,这里就是工程的各种配置,我们只用到有限几个,其他的默认即可 。
注意 存储目录不可以有中文

然后点击Code Generator,进行进一步配置。

 点击GENERATE CODE 创建工程,等待一段时间后,成功打开了工程文件.

 二、流水灯

1.代码编写

打开文件我们会发现main函数里只有一些初始化,并没有主要的程序,while(1)里面是空的,这时候就需要我们来添加代码 

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

      HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	  HAL_Delay(1000);

	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	  HAL_Delay(1000);
	  
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);

延时函数(HAL_Delay)
函数原型: void HAL_Delay (__IO uint32_t Delay)
参数说明:Delay表示所要延时的时间大小,单位是毫秒
写管脚函数(HAL_GPIO_WritePin)
函数原型:void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t
GPIO_Pin, GPIO_PinState PinState)
参数说明:
GPIOx: 管脚组(x的取值为A~G)
GPIO_Pin: 管脚编号(x的取值为0~15)
PinState: 管脚的状态(取值为GPIO_BIT_RESET表示0, GPIO_BIT_SET表示1)

PS:所有自己编写的代码请放在/* USER CODE BEGIN XXX / / USER CODE END XXX */之间;
这样我们修改工程的时候你自己写的代码就不会被删除。

2.烧录运行

编译发现没有报错,那么进行烧录啦。

 具体连线与过程可以看我前面写的流水灯博客

STM32F103寄存器方式点亮LED流水灯与GPIO简单讲解_我想恰鱼的博客-CSDN博客

结果展示:

三、串口通信

1.准备

本人是的板子是正点原子的ministm32开发板 功能强大 完成USART串口通讯不需要额外搭载CH340 只需要自带的线一方接板子另一方连接电脑即可

ALIENTEK MiniSTM32 开发板所使用 的 STM32F103RCT6 最多可提供 5 路串口,有分数波特率发生器、支持同步单线通信和半双工 单线通讯、支持 LIN、支持调制解调器操作、智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA 等。 

MiniSTM32 开发板板载了 1 USB 串口和 1 RS232 串口。

2.代码编写

这里我就主要介绍下重要的代码 具体工程文件我会放在本文末 需要的可以下载

test.c

#include "sys.h"
#include "usart.h"		
#include "delay.h"	 
int main(void)
{				 
	u16 t; u16 len; 
	Stm32_Clock_Init(9);	//
	delay_init(72);	  		
	uart_init(72,115200); 	//´®¿Ú³õʼ»¯ÉèÖÃΪ115200
  	while(1)
	{
		 
			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);//??????
			}
	
			USART_RX_STA=0;
	    delay_ms(500); 
	}	 
} 

while((USART1->SR&0X40)==0);//等待发送结束,在写了一个字节在 USART1->DR 之后,要检测这个数据是否已经被发送完成了,通过检测USART1->SR 的第 6 位,是否为 1 来决定是否可以开始第二个字节的发送。

在SYSTEM组下双击usart.c,其中的uart_init函数,代码如下

//初始化 IO 串口 1
//pclk2:PCLK2 时钟频率(Mhz)
//bound:波特率
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<<8; //PE 中断使能
USART1->CR1|=1<<5; //接收缓冲区非空中断使能 
MY_NVIC_Init(3,3,USART1_IRQn,2);//组 2,最低优先级
#endif
}

从该代码可以看出,其初始化串口的过程,和我们前面介绍的一致。先计算得到USART1->BRR 的内容。然后开始初始化串口引脚,然之后设置波特率和奇偶校验等。
这里需要注意一点,因为我们使用到了串口的中断接收,必须在 usart.h 里面设置EN_USART1_RX 为 1(默认设置就是 1 的)。该函数才会配置中断使能,以及开启串口 1 的 NVIC中断。这里我们把串口 1 中断放在组 2,优先级设置为组 2 里面的最低。

编译成功后烧录

3.串口助手观察输出

打开XCOM串口助手,选择串口,点击打开串口,即可以接收到C8T6发送的数据Hello Windows!

4.文件自取

 链接:https://pan.baidu.com/s/1B5Wu6SMMHX4agFbuzA6GIg 
提取码:z3tq 
 

四、参考网站:

STM32实现LED闪烁——基于HAL库_Harriet的博客-CSDN博客_stm32实现led灯的闪烁

【STM32】STM32 CubeMx使用教程一--安装教程_Z小旋-CSDN博客_stm32cubemx安装

【STM32】STM32CubeMX教程二--基本使用(新建工程点亮LED灯)_Z小旋-CSDN博客_cubemx教程

keil软件仿真时如何使用逻辑分析仪查看波形_HXYDJ的博客-CSDN博客

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值