电脑与树莓派与stm32串口通信

  • stm32设置
  • 树莓派代码

stm32设置


// 核心代码,不能运行
void M1_PID(float top);
void upmada(void);
typedef  struct {struct {uint16_t ch0;//auint16_t ch1;//buint16_t ch2;//cuint16_t ch3;//duint8_t s1;//euint8_t s2;//f}rc;struct {int16_t x;//int16_t y;//int16_t z;//uint8_t press_l;//uint8_t press_r;//}mouse;struct {uint16_t v;//}key;}RC_Ctl_t;
static RC_Ctl_t RC_CtrlData;typedef  struct {float p;float i;float d;float e0;float e1;float e2;float zi;
}PID;static PID M1_pid;uint8_t aTxStartMessages[] = "1203";
volatile  uint8_t aRxBuffer[30];void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */UNUSED(GPIO_Pin);if(GPIO_Pin  == GPIO_PIN_8){//printf("cddc");HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);}
}void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM10){//printf("cddc");upmada();//HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);}}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{UNUSED(huart);//HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,25,0xFFFF);//printf("%s",aRxBuffer);switch(aRxBuffer[0]){case 'a' : RC_CtrlData.rc.ch0 = (uint16_t)(aRxBuffer[1]-'0')*100+(uint16_t)(aRxBuffer[2]-'0')*10+(uint16_t)(aRxBuffer[3]-'0'); printf("%d",RC_CtrlData.rc.ch0);RC_CtrlData.rc.ch1 = (uint16_t)(aRxBuffer[4]-'0')*100+(uint16_t)(aRxBuffer[5]-'0')*10+(uint16_t)(aRxBuffer[6]-'0'); printf("%d",RC_CtrlData.rc.ch1);RC_CtrlData.rc.ch2 = (uint16_t)(aRxBuffer[7]-'0')*100+(uint16_t)(aRxBuffer[8]-'0')*10+(uint16_t)(aRxBuffer[9]-'0'); printf("%d",RC_CtrlData.rc.ch2);RC_CtrlData.rc.ch3 = (uint16_t)(aRxBuffer[10]-'0')*100+(uint16_t)(aRxBuffer[11]-'0')*10+(uint16_t)(aRxBuffer[12]-'0'); printf("%d",RC_CtrlData.rc.ch3);RC_CtrlData.rc.s1 = (uint16_t)(aRxBuffer[13]-'0')*100+(uint16_t)(aRxBuffer[14]-'0')*10+(uint16_t)(aRxBuffer[15]-'0'); printf("%d",RC_CtrlData.rc.s1);RC_CtrlData.rc.s2 = (uint16_t)(aRxBuffer[16]-'0')*100+(uint16_t)(aRxBuffer[17]-'0')*10+(uint16_t)(aRxBuffer[18]-'0'); printf("%d",RC_CtrlData.rc.s2); printf("ok");break ;default: printf(" no word **");HAL_UART_DMAStop(&huart1);HAL_UART_Receive_DMA(&huart1,(uint8_t*)aRxBuffer,20);
;}}
void upmada(void){//geng xin hui diao han shu//printf("%d",RC_CtrlData.rc.ch0);if(M1_pid.zi>500){__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,0);__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,M1_pid.zi-500);}else if(M1_pid.zi <  500){__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,0);__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,500-M1_pid.zi);}else if(M1_pid.zi == 500){__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,0);__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,0);}M1_PID(RC_CtrlData.rc.ch0); }void M1_PID(float top){float put;M1_pid.e0 = (top - M1_pid.zi);put = M1_pid.p*(M1_pid.e0-M1_pid.e1)+M1_pid.i*M1_pid.e0+M1_pid.d*(M1_pid.e0-2*M1_pid.e2+M1_pid.e2);M1_pid.e2 = M1_pid.e1;M1_pid.e1 = M1_pid.e0;M1_pid.zi += put;
}M1_pid.p = 0.1;M1_pid.i = 0.1;M1_pid.d = 0.007;M1_pid.e0 = 0;M1_pid.e1 = 0;M1_pid.e2 = 0;M1_pid.zi = 500;RC_CtrlData.rc.ch0 = 500;__HAL_TIM_CLEAR_IT(&htim10,TIM_IT_UPDATE);//HAL_TIM_Base_Start_IT(&htim10);//HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,0);HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); HAL_UART_Receive_DMA(&huart1,(uint8_t*)aRxBuffer,20);

树莓派代码

###  可以用的
import serial
import time
import RPi.GPIO as gpio
import cv2
import numpy as np
import threading
from threading import Lock,Threadclass USARTOR:def __init__(self):self.com = "/dev/ttyUSB0"self.btl = 9600self.ts = 'a000123123123123123'self.rs = 'a000123123123123123'def setup(self):self.ser = serial.Serial(self.com ,self.btl)if self.ser.isOpen == False:self.ser.open()#self.ser.write(self.ts.encode())def Writer(self):self.ser.write(self.ts.encode())self.ser.flushInput()Usartor = USARTOR()
Usartor.setup()
def get3(num):num = (int)(num)Num = str((int(num/100))) + str((int((num/10)%10)) ) + str(int(num%10)) return str(Num)
def callback(object):passdef update():img = np.zeros((200, 400, 3), np.uint8)cv2.namedWindow('image')cv2.createTrackbar('R', 'image', 0, 999, callback)while True:theta0 = cv2.getTrackbarPos('R', 'image')theta0 = get3(theta0)Usartor.ts = Usartor.ts[0]+ theta0 + Usartor.ts[4:]#Usartor.ts[2:4] = theta0 #print(Usartor.ts)#print(theta0)Usartor.Writer()if cv2.waitKey(4) & 0xFF == ord('q'):breakcv2.imshow('image', img)cv2.destroyAllWindows()
def main():update()if __name__ == '__main__':main()


主要思想:树莓派与电脑客户端(pyqt5制作)通过socket局域网通信(还没有做),树莓派与32通过USB端口进行串口通信(双向),32控制马达转动(PID,PWM,DMA)。
未完待续…

电脑与树莓派与stm32f4串口通信相关推荐

  1. STM32F4串口通信

    STM32F4串口通信 串口通信简介:串口通信,是指外设和计算机之间,通过数据信号线.地线等,按位进行传输数据的一种通信方式,属于串行通信方式.串口是一种接口标准,它规定了接口的电气标准,没有规定接口 ...

  2. 树莓派php minicom,用DHT11实践树莓派与Arduino串口通信 | 树莓派实验室

    Arduino具有丰富的外部接口,与树莓派的IO口最大的不同在于Arduino具有模拟输入接口,可以测量IO口上的模拟值.Arduino与Raspberry通过串口(Serial)通信的方案一般有两种 ...

  3. 树莓派与pixhawk串口通信

    一.Pixhawk部分 1.读取数据测试 步骤: 在Firmware/src/modules中添加一个新的文件夹,命名为rw_uart 在rw_uart文件夹中创建CMakeLists.txt文件,并 ...

  4. (二)树莓派Linux环境串口通信编程--AT指令集的发送和接收

    文章目录 一.前言 二.要了解的知识 2.1 termios结构体 2.2 tcflush() 2.3 cfsetispeed()与cfsetospeed() 三.流程图设计与代码实现 serial_ ...

  5. fpga板子怎么和电脑连_FPGA与PC串口通信设计与实现

    FPGA 与 PC 串口通信设计与实现 朱泽锋 1 赵丹辉 2 王鹏宇 1 [摘 要] 本文采用 Verilog 硬件描述语言,利用 Xilinx 公司的 FPGA 芯片实现 其与 PC 间的串行通信 ...

  6. 串口通信协议(基于面试),与及树莓派与电脑之间串口通信

    一.首先来说一下基于面试的串口通信协议 树莓派wiringPi库详解 (1)串口通信是基于多机的通信 主要就是两根线:RXD和TXD 举例,语音识别模块与树莓派之间进行串口通信 语音模块的T连接树莓派 ...

  7. python树莓派串口通信实例_树莓派通过串口发送数据

    可以通过串口登陆树莓派,也可以通过串口向其他主机发送数据.树莓派的串口接受数据科技爱好者博客已经写过,可以参考这篇文章:树莓派与arduino串口通信实践.这篇文章教大家如果通过树莓派的串口发送数据. ...

  8. 语音模块LD3320模块的二次开发,并与树莓派进行串口通信

    一.首先模块介绍 (1)参数详解 型号:YS-LDV7 名称:一体化语音识别模块 规格:43*29.7MM 供电电压:5V (内部工作电压 3.3V) 待机电流:30MA 识别时电流:45MA IO ...

  9. 32、树莓派的简单测试串口通信和超声波模块测距

    基本思想:随手记录一下众灵科技树莓派的测试串口通信和超声波模块,其镜像还是很nice,基本的库都给你安装了,比较大 链接:https://pan.baidu.com/s/11tMdoRh3bHmcYz ...

最新文章

  1. 在Unity中制作4种不同的游戏
  2. POJ - 3070 Fibonacci
  3. python 中的接口_python中接口
  4. 判断一个对象是否存在某个键_面向工业大数据的对象存储技术实践
  5. 特征图大小_新手向快速了解图神经网络
  6. 我们讨论的是《战争之城》的一个简单版本。如果地图上只有空旷的空间,河流,钢墙和砖墙。你的任务是尽快得到奖金,假设没有敌人会打扰你(见下图) 你的坦克不能穿过河流和墙壁,但它可以通过射击摧毁砖墙。当你击
  7. taylor级数 matlab,Taylor级数与Fourier级数展开式比较与MATLAB实例.docx
  8. UVA 10895——Matrix Transpose
  9. Prometheus监控学习笔记之360基于Prometheus的在线服务监控实践
  10. 简洁后台管理非常简洁
  11. 拓端tecdat|R语言用线性回归模型预测空气质量臭氧数据
  12. 三向合并和 Git 的合并策略,手把手教你Git 合并
  13. Epub电子书实战解析
  14. 你还在为不知道怎么给家人庆祝生日而发愁吗?
  15. ES6.x版本单机三节点配置discovery.zen.ping.unicast.hosts 错误
  16. 微信任务(投票)分发平台
  17. java高校心理测评管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  18. java简单实现在线资源多线程下载,断点续存,限制最大正在下载数
  19. 求1-1000以内的回文素数。回文素数指的是这个数既是回文数又是素数。
  20. nuxt服务端渲染技术

热门文章

  1. 手把手教你用 Tauri+Vue 创建小型桌面应用
  2. 让 Google 搜索到自己的博客
  3. python两个数组合并排序_合并Python中的排序数组
  4. 10000marker_为什么跑全基因组dna时为什么用10000bp的marker
  5. 【AD系列教程】在PCB中加入任意图形
  6. win7计算机睡眠后无法唤醒,win7系统待机后打不开怎么办|win7待机无法唤醒的解决方法...
  7. python的界面文字翻译_教你用Python实现微信翻译机器人
  8. 数据库+jdbc实现学生教师管理
  9. 分析了网易云数十万歌单后写出2020年的最全歌单推荐
  10. 苹果 开发者账号如下