STM32串口通信

本文通过STM32CubeMX和Keil,详细介绍了如何使用寄存器和HAL库两种方式实现LED点灯及串口通信。实验包括创建项目、配置时钟与GPIO、发送'Hello windows!'等,同时利用软件仿真逻辑分析仪观察时序波形,进行调试和故障定位。
摘要由CSDN通过智能技术生成

目录

一、实验目的

二、寄存器实现点灯

1、项目创建

2、编写代码

3、烧录编译

4、观察GPIO端口的输出波形

三、HAL库点亮LED流水灯

1、安装HAL库

​编辑2、创建工程

3、配置工作

(1)时钟配置

(2)GPIO配置

(3) 配置调试接口

(4) 生成工程

四、USART串口通信发送Hello world

1、USART功能介绍

2、代码实现

五、烧录运行 

1、仪器准备

2仪器连线

3烧录

六、观察输出波形

1.设置仿真模式

 2、使用逻辑分析仪

 七、参考文献


一、实验目的

 安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务:

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

2、完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:

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

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

在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,和第2题中串口输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

 

二、寄存器实现点灯

1、项目创建

与上次实验基本相同

搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写_weixin_45203491的博客-CSDN博客

注意,出现此界面的时候

img编辑

关闭此窗口即可

其中芯片的选择需要更换为STM32F103C8

2、编写代码

然后添加.c程序,并且写入以下代码

//--------------APB2???????------------------------
#define RCC_AP2ENR	*((unsigned volatile int*)0x40021018)
	//----------------GPIOA????? ------------------------
#define GPIOA_CRL	*((unsigned volatile int*)0x40010800)
#define	GPIOA_ORD	*((unsigned volatile int*)0x4001080C)
//----------------GPIOB????? ------------------------
#define GPIOB_CRH	*((unsigned volatile int*)0x40010C04)
#define	GPIOB_ORD	*((unsigned volatile int*)0x40010C0C)
//----------------GPIOC????? ------------------------
#define GPIOC_CRH	*((unsigned volatile int*)0x40011004)
#define	GPIOC_ORD	*((unsigned volatile int*)0x4001100C)
//-------------------???????-----------------------
void  Delay_wxc( volatile  unsigned  int  t)
{
     unsigned  int  i;
     while(t--)
         for (i=0;i<800;i++);
}
//------------------------???--------------------------
int main()
{
	int j=100;
	RCC_AP2ENR|=1<<2;			//APB2-GPIOA??????
	RCC_AP2ENR|=1<<3;			//APB2-GPIOB??????	
	RCC_AP2ENR|=1<<4;			//APB2-GPIOC??????
	//????????? RCC_APB2ENR|=1<<3|1<<4;
	GPIOA_CRL&=0x0FFFFFFF;		//??? ??	
	GPIOA_CRL|=0x20000000;		//PA7????
	GPIOA_ORD|=1<<7;			//???????
	
	GPIOB_CRH&=0xFFFFFF0F;		//??? ??	
	GPIOB_CRH|=0x00000020;		//PB9????
	GPIOB_ORD|=1<<9;			//???????
	
	GPIOC_CRH&=0x0FFFFFFF;		//??? ??
	GPIOC_CRH|=0x30000000;   	//PC15????
	GPIOC_ORD|=0x1<<15;			//???????	
	while(j)
	{	
		GPIOA_ORD=0x0<<0;		//PB0???	
		Delay_wxc(1000000);
		GPIOA_ORD=0x1<<0;		//PB0???
		Delay_wxc(1000000);
		
		GPIOB_ORD=0x0<<9;		//PB9???	
		Delay_wxc(1000000);
		GPIOB_ORD=0x1<<9;		//PB9???
		Delay_wxc(1000000);
		
		GPIOC_ORD=0x0<<15;		//PC15???	
		Delay_wxc(1000000);
		GPIOC_ORD=0x1<<15;		//PC15???
		Delay_wxc(1000000);
	}
}

注意在Options切换至Output界面

img

勾选生成hex文件

添加驱动文件

img[

img编辑

拷贝至工程目录下即可

3、烧录编译

打开mcuisp,上传工程中生成的hex文件

点击开始编程

img编辑

4、观察GPIO端口的输出波形

img

引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1.12s左右。

三、HAL库点亮LED流水灯

1、安装HAL库

安装好SMT32CubeMX后还需要安装一个固件库,因为我使用的芯片是STM32F103系列的,所以选择STM32F1版本进行安装。安装完后环境就搭建好了。

img2、创建工程

点击New Project创建工程

img

选择这个,然后选择芯片点击Start Project

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值