使用STM32F103R6实现串口1的发送,每隔5s发送1次“ABCDEFG”,循环重复,使用stm32cubemx具体操作流程
时间: 2025-01-12 20:02:13 浏览: 40
使用STM32F103R6实现串口1每隔5秒发送一次"ABCDEFG"的循环发送,可以通过STM32CubeMX进行配置和生成初始化代码。以下是具体操作流程:
1. 打开STM32CubeMX,创建一个新项目。
2. 在"MCU Selector"中选择STM32F103R6型号。
3. 配置时钟:
- 在"Clock Configuration"选项卡中,设置系统时钟为72MHz(根据具体硬件情况调整)。
4. 配置串口1(USART1):
- 在"Pinout"选项卡中,找到USART1并将其模式设置为"Asynchronous"。
- 在"Configuration"选项卡中,设置波特率(如115200)、数据位(8位)、停止位(1位)和校验位(None)。
5. 配置定时器(用于5秒延时):
- 在"Pinout"选项卡中,找到一个定时器(如TIM2)并启用。
- 在"Configuration"选项卡中,设置预分频器和自动重装载值,使得定时器每1秒溢出一次。
6. 生成代码:
- 点击"Project" -> "Generate Code"生成初始化代码。
- 选择使用的IDE(如Keil),并设置项目名称和保存路径。
7. 在生成的代码基础上编写应用逻辑:
```c
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_hal.h"
/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart1;
TIM_HandleTypeDef htim2;
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM2_Init(void);
/* Private user code ---------------------------------------------------------*/
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_TIM2_Init();
HAL_TIM_Base_Start_IT(&htim2); // 启动定时器并使能中断
while (1)
{
// 主循环中无需做任何事情,所有操作在中断中完成
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2)
{
char msg[] = "ABCDEFG";
HAL_UART_Transmit(&huart1, (uint8_t*)msg, sizeof(msg)-1, HAL_MAX_DELAY);
}
}
/* 其他自动生成的初始化函数省略 */
```
8. 编译并下载程序到STM32F103R6开发板。
9. 连接串口调试工具(如串口助手)到开发板的串口1,设置正确的波特率。
10. 复位开发板,观察串口调试工具,每隔5秒应该会接收到一次"ABCDEFG"。
这个实现使用了定时器中断来控制发送间隔,避免了在主循环中使用延时函数,提高了程序的响应性。
阅读全文
相关推荐

















