LINUX 下 arduino + stm32芯片 两个MCU互相SPI通信 开发过程中的一些问题与解决 (STLINK/Serial)

项目场景:

最近由于要使用STM32G031系列芯片,所以需要进行调试.之前一直使用UART模式,后来觉得有点麻烦,就想试试st-link.

系统:Ubuntu 18.04.5
工具:淘宝买的STLINK-V2,逻辑分析仪,自己设计的焊了STM32芯片和排针的PCB,焊了一堆之前设计的模块的电路板的"大面包板",MINI USB 线,打印口USB线,FFC线,若干杜邦线等


问题描述

在操作过程中,最早出现了

Error:Promblem occured while trying to connect.

原因分析:

1:硬件(连接不对)
2:软件(缺少组件\配置不对)


解决方案:

后来发现问题出在淘宝买的stlink 固件版本太旧,用STM32CubeProgrammer 的"Firmware upgrade" 给升级了一下,问题就解决了

问题描述

用arduino 写了一下简单的代码试下SPI,发现逻辑分析仪读到的信号不对,想用Serial看一下,结果报错.

void setup() {
    Serial.begin(115200);
    Serial.println("start...");
    //下面是别的代码
Compilation error: 'Serial' was not declared in this scope; did you mean 'Serial2'?

原因分析:

1:软件(缺少组件\配置不对)


解决方案:

检查了一下arduino的配置.在"TOOLs"中,有个"U(S)ART support"设定,在悬停出现的几个选项里,要选择"Enabled(generic ‘Serial’)"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的程序,实现了ESP8266 NodeMCUSTM32之间的软串口通信。 ESP8266 NodeMCU端代码: ``` #include <SoftwareSerial.h> // 定义软串口对象 SoftwareSerial mySerial(D2, D3); // RX, TX void setup() { // 初始化串口通信 Serial.begin(9600); mySerial.begin(9600); } void loop() { if (mySerial.available()) { // 从软串口接收数据 char c = mySerial.read(); // 输出接收到的数据 Serial.print(c); // 发送数据到软串口 mySerial.write(c); } } ``` STM32端代码: ``` #include "stm32f10x.h" #include <stdio.h> // 定义串口通信函数 void USART_SendString(USART_TypeDef* USARTx, char* s) { while(*s) { // 等待发送缓冲区为空 while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET); // 发送数据 USART_SendData(USARTx, *s++); } } int main(void) { // 初始化串口通信 USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(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); while(1) { if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET) { // 从串口接收数据 char c = USART_ReceiveData(USART1); // 发送数据到串口 USART_SendString(USART1, &c); } } } ``` 需要注意的是,ESP8266 NodeMCUSTM32之间的连接方式需要自行搭建,并在代码设置正确的引脚号。同时,串口通信的波特率也需要保持一致。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值