蓝桥杯物联网竞赛_STM32L071_5_串口接收发送数据

2023-11-29 02:44

本文主要是介绍蓝桥杯物联网竞赛_STM32L071_5_串口接收发送数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

理论:

串口采取异步通信,即不依赖时钟节拍来接收或发送数据,而是采用互相约定的波特率传输数据。

波特率与单位时间传输的比特数有关,波特率越大传输的数据越多
传输一个比特花费的时间T = 1 / 比特率

接受和发送数据的时候需要接受端和发送端:
在这里插入图片描述
UART传输数据是一位一位的向接收端传输,为了知道何时传输,又或者为了保证传输数据的完整正确性,规定了传输协议

在这里插入图片描述
分别为开始、数据、校验、停止,其中校验位可要可不要

传输样例:

在这里插入图片描述
停止位取二进制数0,数据位一般有8位刚好能装下一个字符,一般的停止位是1位取值为1,校验一般不要

开发板原理图:

在这里插入图片描述

可以出开发板有两组收发引脚,但其实真正有效的只有一组即PA2和PA3,下面详细说一下:

在这里插入图片描述
上述是开发板中控制下载调试器部分的芯片,其一般作用就是将程序或固件加载到微处理器或微控制器,朴素的讲调试器主要作用就是将电脑代码导入到开发板的芯片中
在这里插入图片描述

也就是说下载调试器能连接电脑STM32L071要想能与电脑上的串口小助手通信,那就必须TX,RX能与电脑相连,所以下载调试器中的芯片GD32F350C8T6上的PA9、PA10就必须先发送或者接收STM32L071传来的数据,其真正的作用是一个连接作用,即将STM32L071与电脑间接相连

而STM32L071的另外一组引脚没有与下载调试器相连所以也就没有作用

STM32L071的TX,RX与GD32F350C8T6引脚连接的部分:
在这里插入图片描述

而SET由开发板SELECT按键控制其高低电平,高低电平能使其接通1、4引脚或3、4引脚


CubMX配置:

在这里插入图片描述
Asynchronous: 异步通信


Keil配置:

Function.c和Function.h文件:

#include "Function.h"
#include "i2c.h"
#include "oled.h"
#include "usart.h"void OLED_Write(unsigned char type, unsigned char data){ // 写函数unsigned char Write_data[2];Write_data[0] = type;Write_data[1] = data;HAL_I2C_Master_Transmit(&hi2c3, 0x78, Write_data, 2, 0xff);
}void Function_OledEnable(unsigned char ms){ // Oled使能HAL_GPIO_WritePin(OLED_POWER_GPIO_Port, OLED_POWER_Pin, GPIO_PIN_RESET);HAL_Delay(ms);OLED_Init();
}void Function_SendInfromation(const char * data, uint16_t len){ // 发送信息HAL_UART_Transmit(&huart2, data, len, 0xff);
}void Function_ReceiveInfromation(char * data, uint16_t len){ // 接受信息HAL_UART_Receive(&huart2, data, len, 0xff);
}
#ifndef __FUNCTION__
#define __FUNCTION__
#include <stdint.h>void OLED_Write(unsigned char type, unsigned char data);
void Function_OledEnable(unsigned char ms);
void Function_ReceiveInfromation(char * data, uint16_t len);
void Function_SendInfromation(const char * data, uint16_t len);
#endif

main.c

#include "main.h"
#include "i2c.h"
#include "usart.h"
#include "gpio.h"
#include "Function.h"
#include "oled.h"
#include <string.h>
void SystemClock_Config(void);int main(void)
{char a[] = {4, 5, 6};char flag = 1;char b[] = {0, 0, 0};HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_I2C3_Init();MX_USART2_UART_Init();Function_OledEnable(50);while (1){OLED_ShowString(0, 0, "i am wining", 16);if(flag <= 2){flag ++;HAL_Delay(5000);Function_SendInfromation(a, strlen(a));HAL_Delay(5000);}OLED_ShowString(0, 2, "Receive:", 16);Function_ReceiveInfromation(b, 3);if(b[0] == '@'){OLED_ShowString(64, 2, b, 16);b[0] = '1';			}}
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Configure the main internal regulator output voltage*/__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/** 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_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;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_PLLCLK;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_1) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_I2C3;PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;PeriphClkInit.I2c3ClockSelection = RCC_I2C3CLKSOURCE_PCLK1;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
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 */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

效果:

在这里插入图片描述

程序启动后等10s钟后发送数据:

在这里插入图片描述

拓展:

HAL_UART_TransmitHAL_UART_Receive,在传输与接收数据的时候,都会对做一些检查,例如指针数据长度是否有效,收发是否有效,如果不合格就会返回错误,如果合格就会进入忙碌状态即利用while函数一直对数据进行转发,或者收取。

在接受数据的时候,如果未能及时接收,那么后到的数据回应超时未接收报错,然后终止操作,这就是为什么在主函数有程序抢占cpu时不能即时接收数据,最后显示的数据只有一个字符。

这种情况可以用中断串口通信解决。

这篇关于蓝桥杯物联网竞赛_STM32L071_5_串口接收发送数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431157

相关文章

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

C语言蓝桥杯

一、语言基础 竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_s

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

物联网之流水LED灯、正常流水灯、反复流水灯、移动流水灯

MENU 硬件电路设计软件程序设计正常流水LED灯反复流水LED灯移动流水LED灯 硬件电路设计 材料名称数量直插式LED1kΩ电阻杜邦线(跳线)若干面包板1 每一个LED的正极与开发板一个GPIO引脚相连,并串联一个电阻,负极接GND。 当然也可以选择只使用一个电阻。 软件程序设计 正常流水LED灯 因为要用到多个GPIO引脚,所以最好把所有的GPI

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

2024 年高教社杯全国大学生数学建模竞赛题目——2024 年高教社杯全国大学生数学建模竞赛题目的求解

2024 年高教社杯全国大学生数学建模竞赛题目 (请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”) 2024 年高教社杯全国大学生数学建模竞赛题目 随着城市化进程的加快、机动车的快速普及, 以及人们活动范围的不断扩大,城市道 路交通拥堵问题日渐严重,即使在一些非中心城市,道路交通拥堵问题也成为影响地方经 济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。 考虑一个拥有知名景区

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略 参考论文 无水印

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次!  完整论文+代码+数据结果链接在文末!  订阅后可查看参考论文文件 第一问 1.1 问题重述 这个问题围绕的是华北山区的某乡村,在有限的耕地条件下,如何制定最优的农作物种植策略。乡村有 34 块露天耕地和 20 个大棚,种植条件包括粮食作物、蔬菜、水稻和食用菌。除了要考虑地块的面积、种植季节等,还要确保

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器,按芯片来分,有以下几种: CH340PL2303CP2104FT232 一般来说,采用 CH340 芯片的适配器,性能比较稳定,价

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口