第四章 stm32 cubemx 串口实验以及proteus仿真(上)
文章目录
前言
这一章我们将学习 STM32F103 的串口,教大家如何使用 STM32F103 的串口来发送和接收数据。本章将实现如下功能:STM32F103 通过串口实现板子之间的通信,利用通信来实现板子间的控制,如果STM32F103板子数量有限可利用一块板子两个串口模拟两块板子的通信或者利用Proteus进行仿真,本章依据仿真来讲解串口中断实验。
一、串口是什么?
串口作为 MCU 的重要外部接口,同时也是软件开发重要的调试手段,其重要性不言而喻。现在基本上所有的 MCU 都会带有串口,STM32 自然也不例外。STM32 的串口资源相当丰富的,功能也相当强劲。STM32F103一般都有多路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、支持调制解调器操作、智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA等。接下来我们将主要从STM32CUBEMX的界面,告诉你如何设置串口,以达到我们最基本的通信功能。本章,我们将实现利用串口不停的打印信息,同时接收从串口发过来的数据,利用接收到的数据进行一定的控制。
二、工程配置步骤
1.基础配置
步骤详情参考:第一章 stm32 cubemx基础配置实验以及proteus 8的使用
1)sys中,选好调试方式,DEBUG中选中Serial Wire,实际上板子测试时会占用PA13和PA14两个I/O口,用作下载或者调试。
2)RCC时钟,晶振选择,选择HSE(外部高速时钟)为Crystal/Ceramic Resonator,外部低速时钟(LSE)可有可无。
3)时钟配置,记录系统时钟频率,这里是72M用作仿真时选择芯片的晶振频率。
4)其他配置此工程不用,暂不配置。
2.配置引脚
此时IO口为复用功能的 IO,我们首先要使能 GPIO 时钟,然后使能复用功能时钟,同时要把 GPIO 模式设置为复用功能对应的模式。这些准备工作利用STM32CUBEMX可以直接配置好,然后是串口参数的初始化设置,包括波特率,停止位等等参数。在设置完成后,接下来就是使能串口,这很容易理解。同时,这里我们需要用到串口的中断,需要设置NVIC 设置中断优先级别。
串口的波特率我设置为9600,默认为115200,注意串口通信需要将波特率设置一致,此处较低是为了方便Proteus仿真。
3.开启中断,设置中断优先级
进行中断使能,由于此时只用到了串口中断,中断任务之间不存在影响,故优先级直接采取默认设置。
4.其他配置,生成代码
三.找到主函数,加入代码,编译。
代码如下(示例):
#include "stdio.h"
#if 1
#pragma import(__use_no_semihosting)
//标准库支持的函数
struct __FILE
{
int handle;
};
FILE __stdout;
//重新定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);
USART1->DR = (uint8_t) ch;
return ch;
}
#endif
主函数代码如下(示例):
while (1)
{
printf("123\r\n");
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
HAL库发送的方式
以上利用大家熟悉的printf函数,串口打印的方式进行串口通信。
加入函数
uint8_t buffer[3];
buffer[0] = '4';
buffer[1] = '5';
buffer[2] = '6';
HAL_UART_Transmit(&huart1, buffer, 3, 999);
四.Proteus仿真或者烧录可直接看到效果。
直接烧录时一定要注意选择的IO口,与实际stm32板子的原理图相匹配。实验效果为每隔500ms打印出1个‘12345’的字样。
如何使用Proteus,参考:第一章 stm32 cubemx基础配置实验以及proteus 8的使用
五.补充说明
1.printf函数中加入了回车换行“\r\n”符。
2.如果串口发送框丢失
总结
以上就是今天要讲的内容,本文为串口实验以及利用Proteus仿真看到的效果。
如果是在基础配置Cubemx或者基础操作Proteus时出现问题请参考:第一章 stm32 cubemx基础配置实验以及proteus 8的使用