基于Arduino的stm32串口通信

本文详细介绍了如何利用Arduino IDE进行STM32的安装配置,包括添加STM32硬件支持,安装ARM编译器,并通过实例展示了如何实现串口通信,以及对收到的特定命令作出响应。同时,对比了标准库和HAL库在STM32编程上的差异,指出HAL库的高抽象性和易移植性。
摘要由CSDN通过智能技术生成

一、Arduino的安装与配置

安装

1)提取安装包
连接:戳一戳
提取码: q251
2)双击arduino-1.8.12-windows.exe正常安装,一直按默认方式安装下去就行,也可以自己选择路径。
注意:选择路径时不要有中文。
在这里插入图片描述

配置

1)将打包文件中的Arduino_STM32整个文件夹拷贝到Arduino安装目录下的hareware下。
在这里插入图片描述
在这里插入图片描述

2)然后打开Arduino,点击菜单栏\工具\开发板…\第一栏的开发板管理器
在这里插入图片描述
3)输入ARM关键字搜索,选中Cortex-M3系列的编译支持文件并安装
在这里插入图片描述
4)安装完成后,在菜单栏\工具\开发板选择芯片类型,由于我使用的是stm32f103指南者,所以选择为Generic STM32F103V series。
在这里插入图片描述
5)Variant,Upload method,CPU Speed,Optimize这几个的选择如下:
在这里插入图片描述

二、用Arduino 完成stm32的串口通信

1)连接stm32f103指南者开发板
在这里插入图片描述

2)烧录程序
以下代码完成:
持续向串口输出“Hello world!”;
当接收到“stop”时,停止输出;
小灯闪烁。

int flag=1;   
char Stop[]
要实现STM32Arduino之间的串口通信,需要进行以下步骤: 1.确定串口通信参数:包括波特率、数据位、停止位、奇偶校验位等参数,必须保证两端设置的参数一致。 2.在STM32Arduino上分别编写串口通信代码,其中包括初始化串口、发送数据和接收数据等操作。 3.在STM32Arduino之间连接串口通信的引脚,即连接TXD和RXD引脚,注意需要连接两端的引脚一一对应。 4.在Arduino上打开串口监视器,可以实时查看串口通信的数据。 下面是一个简单的实例代码,可以让STM32Arduino发送数据,并接收Arduino返回的数据: 在STM32上的代码: ``` #include <stdio.h> #include "stm32f10x.h" void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } void USART1_SendChar(uint8_t ch) { USART_SendData(USART1, ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } uint8_t USART1_ReceiveChar(void) { while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); return USART_ReceiveData(USART1); } int main(void) { uint8_t ch; USART1_Init(); while (1) { USART1_SendChar('H'); USART1_SendChar('e'); USART1_SendChar('l'); USART1_SendChar('l'); USART1_SendChar('o'); USART1_SendChar('\r'); USART1_SendChar('\n'); ch = USART1_ReceiveChar(); if (ch != 0) { printf("Received char: %c\n", ch); } } } ``` 在Arduino上的代码: ``` void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { char ch = Serial.read(); Serial.print("Received char: "); Serial.println(ch); } delay(1000); Serial.print("Hello world!\n"); } ``` 在这个例子中,STM32会向Arduino发送字符串"Hello",并使用printf函数输出接收到的字符;Arduino会不断发送"Hello world!"字符串,并在接收到STM32发送的字符时输出到串口监视器中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值