PX4中通过串口读取STM32F4串口发送过来消息并发布UORB主题

PX4中通过串口读取STM32F4串口发送过来消息并发布UORB主题

本次小项目是通过PX4读取STM32F4发过来的数据,之前博客介绍了我做的STM32端项目,再稍微啰嗦一下:解析AIRMAR和测深仪数据,该数据采用NEMA0183协议传输的。PX4接收到数据会通过mavlink消息发布出去,通过433MHz来进行无线传输,然后在岸边读取内河中的气象信息。
本项目会通过几篇博客去介绍,本次主要介绍PX4中通过串口读取STM32F4串口发送过来消息并发布UORB主题,本次帖子主要是参考网络上一些大神方法进行编写,希望对大家有用,欢迎各位朋友及时提出问题。
在Firmware/msg目录下新建read_uart_sensor.msg文件并添加到CMakeLists.txt中,编译后自动生成uORB/topics/read_uart_sensor.h头文件
在这里插入图片描述

char[10] jingdustr
char[10] weidustr
char[10] hangsustr
char[10] hangxiangstr
char[10] fengsustr
char[10] fengxiangstr
char[10] wendustr
char[10] shendustr

float32 longitude
float32 latitude
float32 hang_su
float32 hang_xiang
float32 feng_su
float32 feng_xiang
float32 wen_du
float32 shen_du

# TOPICS read_uart_sensor

在Firmware/src/modules目录下新建文件夹read_uart_sensor。添加文件read_uart_sensor.c
在这里插入图片描述
PX4接收串口接收代码

/*
 * 串口读取函数
 * read_uart_sensor.c
 */
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <stdbool.h>
#include <errno.h>
#include <drivers/drv_hrt.h>
#include <string.h>
#include <systemlib/err.h>
#include <nuttx/config.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <poll.h>
#include <uORB/uORB.h>
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_attitude.h>
#include <uORB/topics/read_uart_sensor.h>
#include <px4_tasks.h>
__EXPORT int read_uart_sensor_main(int argc, char *argv[]);

static int daemon_task;
static bool thread_should_exit = true;
static bool thread_running = false;

int read_uart_thread_main(int argc, char *argv[]);
static void usage(const char *reason);
static int uart_init(char * uart_name);
static int set_uart_baudrate(const int fd, unsigned int baud);
int set_uart_baudrate(const int fd, unsigned int baud)
{
    int speed;
    switch (baud) {
    case 9600:   speed = 9600;   break;
    case 19200:  speed = 19200;  break;
    case 38400:  speed = 38400;  break;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值