你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32和树莓派串口透传

[复制链接]
STMCU 发布时间:2020-9-4 16:05

最近做一个项目需要STM32和树莓派进行串口通信,实现原理如下:


第一步:使用USB转TTL分别调试STM32和树莓派的串口透传,确保可以通信;


第二步:确保第一步成功后,将树莓派和STM32连接,进行串口透传。


下面进行具体实验吧~


  • 树莓派环境串口透传


在开始前说明以下几点:


1、树莓派UART端口的位置:TXD位于HEAD-8;RXD位于HEAD-10;GND位于HEAD-6(可选其他GND)。


2、树莓派的TXD应接USB转串口设备的RXD,当然如果测试失败请交换RXD和TXD的顺序。


20200904160714.9b8063eba5fc9888b8d84c69a52c5aec.png


树莓派串口通信需要配置环境,主要修改两处,具体如下:


第一处:进入  /boot/cmdline.txt 文件


输入以下指令:

  1. sudo nano /boot/cmdline.txt
复制代码

删除以下部分:

  1. console=ttyAMA0,115200 kgdboc=ttyAMA0,115200
复制代码

最终变为:

  1. dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
复制代码

第二步:进入  /etc/inittab  文件


输入以下指令:

  1. sudo nano /etc/inittab
复制代码

注释最后一行内容:

  1. #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
复制代码

配置完之后便可测试一下树莓派的UART是否正常工作,而minicom便是一个简单好用的工具。minicom是linux/树莓派平台串口调试工具,相当于windows上的串口调试助手。此时需要先安装minicom:

  1. <p style="line-height: 26px;"><span style="font-family: -apple-system, &quot;&quot;;">sudo apt-get </span><span style="font-family: -apple-system, &quot;&quot;;">install</span><span style="font-family: -apple-system, &quot;&quot;;"> minicom</span></p>
复制代码

接下来启动minicom工具

  1. minicom -b 9600 -o -D /dev/ttyAMA0
  2. #-b代表波特率,-D代表端口,/dev/ttyAMA0 类似于windows中的COM1,-o功能暂时未知
复制代码

效果如下:

2.png



注意:


1、minicom发送内容直接在控制台中输入内容即可,如果minicom打开了回显可在控制台中观察到输出内容,如果回显关闭则控制台中没人任何反应,千万不要以为minicom没有正常工作。


2、minicom回显控制,先Ctrl+A,再E。可翻转回显状态(原来回显打开则此事回显关闭)


3、minicom回显关闭,先Ctrl+A,再Q。


minicom仅满足调试用途,如果需要编程解决问题那么python的serial扩展库——pyserial则是一个不错的选择。


收下需要安装pyserial扩展库,可使用pip或者easy_install安装,也可以直接选择apt-get工具安装。


若使用apt-get工具安装,可输入以下指令:


  1. sudo apt-get install python-serial
复制代码

当以上步骤成功后,就可以使用Python编写树莓派串口透传程序,具体Demo如下:


  1. # -*- coding: utf-8 -*
  2. import serial
  3. import time
  4. # 打开串口
  5. ser = serial.Serial("/dev/ttyAMA0", 9600)
  6. def main():
  7.     while True:
  8.         # 获得接收缓冲区字符
  9.         count = ser.inWaiting()
  10.         if count != 0:
  11.             # 读取内容并回显
  12.             recv = ser.read(count)
  13.             ser.write(recv)
  14.         # 清空接收缓冲区
  15.         ser.flushInput()
  16.         # 必要的软件延时
  17.         time.sleep(0.1)
  18.    
  19. if __name__ == '__main__':
  20.     try:
  21.         main()
  22.     except KeyboardInterrupt:
  23.         if ser != None:
  24.             ser.close()
复制代码

此时实现了莓派的串口通信功能。


  • STM32环境串口透传

接下来实现STM32串口透传,这里我使用的MCU是STM32F103C8T6,配置UART1,STM32不需要配置环境直接在Demo中配置GPIO即可,将USB转TTL的TX连接STM32的RX(PA10),USB转TTL的RX连接STM32的TX(PA9),核心Demo如下:



  1. #include "usart1.h"
  2. #include <stdarg.h>


  3. void USART1_Config(void)
  4. {
  5.         GPIO_InitTypeDef GPIO_InitStructure;
  6.         USART_InitTypeDef USART_InitStructure;


  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

  8.   
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.   GPIO_Init(GPIOA, &GPIO_InitStructure);   
  13.   
  14.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  15.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        
  16.   GPIO_Init(GPIOA, &GPIO_InitStructure);   
  17.          

  18.         USART_InitStructure.USART_BaudRate = 115200;        
  19.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;        
  20.         USART_InitStructure.USART_StopBits = USART_StopBits_1;         
  21.         USART_InitStructure.USART_Parity = USART_Parity_No ;  
  22.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;        
  23.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  24.         USART_Init(USART1, &USART_InitStructure);  
  25.         USART_Cmd(USART1, ENABLE);
  26. }


  27. void UART1SendByte(unsigned char SendData)
  28. {           
  29.         USART_SendData(USART1,SendData);
  30.         while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);            
  31. }  


  32. unsigned char UART1GetByte(unsigned char* GetData)
  33. {              
  34.         if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
  35.         {  return 0;
  36.                 }
  37.         *GetData = USART_ReceiveData(USART1);
  38.         return 1;
  39. }

  40. void UART1Test(void)
  41. {
  42.        unsigned char i = 0;

  43.        while(1)
  44.        {   
  45.                  while(UART1GetByte(&i))
  46.         {
  47.          USART_SendData(USART1,i);
  48.         }      
  49.        }     
  50. }
复制代码



当STM32测试成功后,恭喜各位,将树莓派的TX和STM32的RX(PA10)连接,树莓派的RX和STM32的TX连接(PA9),注意一定要将STM32的GND和树莓派的GND连接,即可实现STM32和树莓派串口通信。







收藏 评论0 发布时间:2020-9-4 16:05

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版