170
1009
3270
中级工程师
最近做一个项目需要STM32和树莓派进行串口通信,实现原理如下:
第一步:使用USB转TTL分别调试STM32和树莓派的串口透传,确保可以通信;
第二步:确保第一步成功后,将树莓派和STM32连接,进行串口透传。
下面进行具体实验吧~
使用特权
6068460d5f7c8cdabb.png (209.38 KB )
下载附件
2021-6-25 23:35 上传
sudo nano /boot/cmdline.txt
console=ttyAMA0,115200 kgdboc=ttyAMA0,115200
1911160d5fa1fe3ed9.png (4.38 KB )
2021-6-25 23:45 上传
2542360d5fa329ab05.png (808 Bytes )
sudo nano /etc/inittab
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
sudo apt-get install minicom
minicom -b 9600 -o -D /dev/ttyAMA0 #-b代表波特率,-D代表端口,/dev/ttyAMA0 类似于windows中的COM1,-o功能暂时未知。
5409660d5fba5d9fc6.png (67.12 KB )
2021-6-25 23:52 上传
sudo apt-get install python-serial
# -*- coding: utf-8 -* import serial import time # 打开串口 ser = serial.Serial("/dev/ttyAMA0", 9600) def main(): while True: # 获得接收缓冲区字符 count = ser.inWaiting() if count != 0: # 读取内容并回显 recv = ser.read(count) ser.write(recv) # 清空接收缓冲区 ser.flushInput() # 必要的软件延时 time.sleep(0.1) if __name__ == '__main__': try: main() except KeyboardInterrupt: if ser != None: ser.close()
#include "usart1.h" #include <stdarg.h> void USART1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, 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 = 115200; 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 UART1SendByte(unsigned char SendData) { USART_SendData(USART1,SendData); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } unsigned char UART1GetByte(unsigned char* GetData) { if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) { return 0; } *GetData = USART_ReceiveData(USART1); return 1; } void UART1Test(void) { unsigned char i = 0; while(1) { while(UART1GetByte(&i)) { USART_SendData(USART1,i); } } }
发表回复 本版积分规则 回帖后跳转到最后一页
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号