第7周---STM32串口通信入门

第7周—STM32串口通信入门

一.配置CUBEMX。

选择STM32F103C8T6点击START PROJECT.
在这里插入图片描述

点击RCC 将HSE设置为CRYSTAL/CERAMIC RESONATOR
在这里插入图片描述

点击SYS 将DEBUG 设置为SERIAL WIRE

在这里插入图片描述

点击进入USART1,将MODE 设置为ASYNCHRONOUS

在这里插入图片描述

进入NVIC 将USART1 GLOBAL INTERRUT 选上
在这里插入图片描述

勾选GENERATE PERIPHERAI

在这里插入图片描述

然后点击GENERATE CODE生成MDK文件。

二,代码烧录

打开烧录出的文件夹

在这里插入图片描述

进入MDK-ARM.打开文件工程

在这里插入图片描述
在这里插入图片描述

将下段代码复制粘贴入main.c文件内。

`#include “main.h”
#include “usart.h”
#include “gpio.h”
#include <string.h>

void SystemClock_Config(void);

char c;//指令 0:停止 1:开始
char message[]=“hello Windows\n”;//输出信息
char tips[]=“CommandError\n”;//提示1
char tips1[]=“Start…\n”;//提示2
char tips2[]=“Stop…\n”;//提示3
int flag=0;//标志 0:停止发送 1.开始发送

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();

//设置接受中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);


​ //当flag为1时,每秒发送一次信息
​ //当flag为0时,停止
while (1)
{
​ if(flag==1){
​ //发送信息
​ HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF);

​ //延时
​ HAL_Delay(1000);
​ }
}
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

//当输入的指令为0时,发送提示并改变flag
if(c=='0'){
	flag=0;
	HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF); 
}

//当输入的指令为1时,发送提示并改变flag
else if(c=='1'){
	flag=1;
	HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF); 
}

//当输入不存在指令时,发送提示并改变flag
else {
	flag=0;
	HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF); 
}

//重新设置中断
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);  

}
/* USER CODE END 4 /
/
*

  • @brief System Clock Configuration
  • @retval None
    */
    void SystemClock_Config(void)
    {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Initializes the RCC Oscillators according to the specified parameters

  • in the RCC_OscInitTypeDef structure.
    /
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
    Error_Handler();
    }
    /
    * Initializes the CPU, AHB and APB buses clocks
    */
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
/
void Error_Handler(void)
{
/
USER CODE BEGIN Error_Handler_Debug /
/
User can add his own implementation to report the HAL error return state /
__disable_irq();
while (1)
{
}
/
USER CODE END Error_Handler_Debug */
}`

然后点击保存编译,生成HEX文件,烧录进入单片机。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三.查看波形:

XTAL这里改成8kHZ

在这里插入图片描述

Debug 出选择 “Use Simulator”,“Dialog DLL” 和 “Parameter” 也需要更改,软件仿真填入
“DARMSTM.DLL” ,参数为 “-pSTM32F103VE”,这里是我的STM32芯片型号。硬件仿真填入
“TARMSTM.DLL” 。

在这里插入图片描述

随后点击:START DEBUG 使用逻辑分析仪,得到波形:

四.总结。

本次作业时STM32串行通信的入门作业,通过本次作业。我对串行通信有了一个初步的了解。并且更加的熟练了使用CUBEMX生成HAL库,在这个过程中我明白了如何使用CUBEMX生成串行通信的基本工程,并且也遇上一些问题,增长了我的知识。
参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值