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

第7周—STM32串口通信入门

一.配置CUBEMX。

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

点击RCC 将HSE设置为CRYSTAL/CERAMIC RESONATOR

在这里插入图片描述

点击SYS 将DEBUG 设置为SERIAL WIRE

在这里插入图片描述

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

在这里插入图片描述

进入NVIC 将USART1 GLOBAL INTERRUT 选上

在这里插入图片描述

点击进入PROJECT MANAGER 输入PROJECT NAME(不能是中文)
在这里插入图片描述

勾选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、付费专栏及课程。

余额充值