那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

QT串口通信的簡(jiǎn)單使用

玩轉(zhuǎn)單片機(jī) ? 來(lái)源:玩轉(zhuǎn)單片機(jī) ? 2024-01-15 09:27 ? 次閱讀

QT串口通信上位機(jī)和下位機(jī)通信常用的通信方式,也是學(xué)習(xí)QT必須學(xué)會(huì)的基礎(chǔ)知識(shí), 這篇就簡(jiǎn)單介紹一下QT串口通信的簡(jiǎn)單使用.

| 創(chuàng)建項(xiàng)目

1: 創(chuàng)建新項(xiàng)目

dbbe5b88-b2bb-11ee-8b88-92fbcf53809c.png

2: 配置相關(guān)信息

dbdb6e4e-b2bb-11ee-8b88-92fbcf53809c.png

dbe5f346-b2bb-11ee-8b88-92fbcf53809c.png

dc0a21f8-b2bb-11ee-8b88-92fbcf53809c.png

dc1d1aec-b2bb-11ee-8b88-92fbcf53809c.png

3: 設(shè)計(jì)界面

dc307b46-b2bb-11ee-8b88-92fbcf53809c.png

dc4b6316-b2bb-11ee-8b88-92fbcf53809c.png

4:編寫(xiě)代碼

目的: 通過(guò)簡(jiǎn)單實(shí)驗(yàn)驗(yàn)證串口通信.

4.1: 配置項(xiàng)目

dc607878-b2bb-11ee-8b88-92fbcf53809c.png

4.2: 編寫(xiě)上位機(jī)代碼

widget.h文件

#ifndefWIDGET_H
#defineWIDGET_H

#include
//引入頭文件
#include
#include

namespaceUi{
classWidget;
}

classWidget:publicQWidget
{
Q_OBJECT

public:
explicitWidget(QWidget*parent=0);
~Widget();

//定義曹函數(shù)
privateslots:
voidon_pushButton_clicked();
voidreceiveInfo();
voidsendInfo();

private:
Ui::Widget*ui;
//串口對(duì)象指針
QSerialPort*m_serialPort;
};

#endif//WIDGET_H

widget.cpp文件

#include"widget.h"
#include"ui_widget.h"

//調(diào)試輸出頭文件
#include

Widget::Widget(QWidget*parent):
QWidget(parent),
ui(newUi::Widget)
{
ui->setupUi(this);

//實(shí)例化一個(gè)串口對(duì)象
m_serialPort=newQSerialPort();

//獲取可用的串口號(hào)
foreach(constQSerialPortInfoinfo,QSerialPortInfo::availablePorts())
{
qDebug()<comboBox->addItem(info.portName());
}
}

Widget::~Widget()
{
deleteui;
}

//pushButton點(diǎn)擊觸發(fā)的槽函數(shù)
voidWidget::on_pushButton_clicked()
{
if(m_serialPort->isOpen())//如果串口已經(jīng)打開(kāi)了先給他關(guān)閉了
{
m_serialPort->clear();
m_serialPort->close();
}

m_serialPort->setPortName(ui->comboBox->currentText());//當(dāng)前選擇的串口名字

if(!m_serialPort->open(QIODevice::ReadWrite))//用ReadWrite的模式嘗試打開(kāi)串口
{
qDebug()<<"打開(kāi)失敗!";
????????return;
????}
????qDebug()<<"串口打開(kāi)成功!";

????m_serialPort->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);//設(shè)置波特率和讀寫(xiě)方向
m_serialPort->setDataBits(QSerialPort::Data8);//數(shù)據(jù)位為8位
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//無(wú)流控制
m_serialPort->setParity(QSerialPort::NoParity);//無(wú)校驗(yàn)位
m_serialPort->setStopBits(QSerialPort::OneStop);//一位停止位

//手動(dòng)綁定槽函數(shù)
connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(receiveInfo()));
connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(sendInfo()));
}

//接收到單片機(jī)發(fā)送的數(shù)據(jù)進(jìn)行解析
voidWidget::receiveInfo()
{
qDebug()<<"接收";
????QByteArray?info?=?m_serialPort->readAll();

qDebug()<<"receive?info:"<write("0x55");
m_serialPort->write("0xaa");
}

4.3: 編寫(xiě)下位機(jī)代碼

main.c文件

#include"stm32f10x.h"
#include"stdio.h"

voidled_init(void);
voidusart_init(uint32_tbound);

intmain(void)
{
uint32_ti=0;
led_init();
usart_init(115200);
printf("ok
");
while(1)
{
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
for(i=0;i

| 驗(yàn)證效果

把下位機(jī)代碼下到開(kāi)發(fā)板, 然后運(yùn)行自己編寫(xiě)的上位機(jī), 點(diǎn)擊上位機(jī)發(fā)送數(shù)據(jù), 下位機(jī)就會(huì)把收到的數(shù)據(jù)返回到上位機(jī), 可以通過(guò)控制臺(tái)查看接收到的數(shù)據(jù);

dc7a3fa6-b2bb-11ee-8b88-92fbcf53809c.png

| 簡(jiǎn)單shell

main.c文件

#include"stm32f10x.h"
#include"stdio.h"
#include"string.h"

#defineCMD_MAX_LEN16//定義最大命令長(zhǎng)度
charcmd_buf[CMD_MAX_LEN];//定義命令緩沖區(qū)
uint8_tcmd_len=0;//定義命令長(zhǎng)度
uint8_tcmd_flag=0;//定義命令接收完成標(biāo)志

voidled_init(void);
voidusart_init(uint32_tbound);
voiduser_shell_irq(void);

intmain(void)
{
led_init();
usart_init(115200);
printf("ok
");
while(1)
{
if(cmd_flag)
{
//匹配指令
if(strcmp(cmd_buf,"ledon")==0)
{
printf("ledon");
}
//清理緩存
cmd_len=0;//清零命令長(zhǎng)度
memset(cmd_buf,0,CMD_MAX_LEN);//清空命令緩沖區(qū)
cmd_flag=0;//清除命令接收完成標(biāo)志
}
}
}

voidled_init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;//定義結(jié)構(gòu)體變量

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//選擇你要設(shè)置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//設(shè)置推挽輸出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//設(shè)置傳輸速率
GPIO_Init(GPIOE,&GPIO_InitStructure);/*初始化GPIO*/

GPIO_SetBits(GPIOE,GPIO_Pin_5);//將LED端口拉高,熄滅所有LED
}

voidusart_init(uint32_tbound)
{
//GPIO端口設(shè)置
GPIO_InitTypeDefGPIO_InitStructure;
USART_InitTypeDefUSART_InitStructure;
NVIC_InitTypeDefNVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

/*配置GPIO的模式和IO口*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX//串口輸出PA9
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用推挽輸出
GPIO_Init(GPIOA,&GPIO_InitStructure);/*初始化串口輸入IO*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX//串口輸入PA10
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//模擬輸入
GPIO_Init(GPIOA,&GPIO_InitStructure);/*初始化GPIO*/

//USART1初始化設(shè)置
USART_InitStructure.USART_BaudRate=bound;//波特率設(shè)置
USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字長(zhǎng)為8位數(shù)據(jù)格式
USART_InitStructure.USART_StopBits=USART_StopBits_1;//一個(gè)停止位
USART_InitStructure.USART_Parity=USART_Parity_No;//無(wú)奇偶校驗(yàn)位
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//無(wú)硬件數(shù)據(jù)流控制
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收發(fā)模式
USART_Init(USART1,&USART_InitStructure);//初始化串口1

USART_Cmd(USART1,ENABLE);//使能串口1

USART_ClearFlag(USART1,USART_FLAG_TC);

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//開(kāi)啟相關(guān)中斷

//Usart1NVIC配置
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//串口1中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//搶占優(yōu)先級(jí)3
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//子優(yōu)先級(jí)3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);//根據(jù)指定的參數(shù)初始化VIC寄存器
}

intfputc(intch,FILE*f)//printf重定向函數(shù)
{
USART_SendData(USART1,(uint8_t)ch);//發(fā)送一字節(jié)數(shù)據(jù)
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待發(fā)送完成
returnch;
}

voidUSART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
//shell
user_shell_irq();
}
}

//獲取
voiduser_shell_irq(void)
{
uint8_ttemp=USART_ReceiveData(USART1);
if(temp=='
'||temp=='
')
{
cmd_buf[cmd_len]='?';
cmd_flag=1;
}
else
{
cmd_buf[cmd_len++]=temp;
if(cmd_len>=CMD_MAX_LEN)
{
//清理緩存
cmd_len=0;
memset(cmd_buf,0,CMD_MAX_LEN);
}
}
}

驗(yàn)證:

dc964d36-b2bb-11ee-8b88-92fbcf53809c.png

簡(jiǎn)單介紹了QT的串口如何與下位機(jī)通信, 同時(shí)也簡(jiǎn)單通過(guò)shell交互, 進(jìn)一步拓展了串口通信場(chǎng)景.

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1627

    瀏覽量

    55725
  • 上位機(jī)
    +關(guān)注

    關(guān)注

    27

    文章

    945

    瀏覽量

    55002
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    1

    文章

    308

    瀏覽量

    38062
  • 下位機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    18823

原文標(biāo)題:QT|串口通信

文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī),微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于QT串口調(diào)試工具設(shè)計(jì)

    串口通信是我們經(jīng)常會(huì)遇到的問(wèn)題。很多時(shí)候當(dāng)我們?cè)O(shè)計(jì)一個(gè)串口應(yīng)用時(shí),我們希望有一個(gè)簡(jiǎn)便的、可視的方式來(lái)驗(yàn)證它。這一篇中我們就來(lái)基于QT設(shè)計(jì)一個(gè)串口
    的頭像 發(fā)表于 12-13 14:37 ?2460次閱讀
    基于<b class='flag-5'>QT</b>的<b class='flag-5'>串口</b>調(diào)試工具設(shè)計(jì)

    QT串口通信的相關(guān)資料推薦

    QT通信-串口通信前言一、串口搜索二、打開(kāi)串口二、發(fā)送或接收數(shù)據(jù)二、程序如下:總結(jié)前言
    發(fā)表于 01-11 07:56

    QT串口程序的編寫(xiě)

    QT串口程序的編寫(xiě)前言:如果用qt寫(xiě)程序作為上位機(jī),然后通過(guò)和u***和下位機(jī)通信的時(shí)候,就需要用到qt中的
    發(fā)表于 01-18 06:08

    Qt串口通信專(zhuān)題教程

    這是一個(gè)關(guān)于在Qt Creator下進(jìn)行串口通信軟件開(kāi)發(fā)的專(zhuān)題教程,能夠幫助你快速的開(kāi)發(fā)有關(guān)的串口應(yīng)用。
    發(fā)表于 05-04 14:37 ?24次下載

    基于Qt串口通信應(yīng)用研究與實(shí)現(xiàn)嚴(yán)賢

    基于Qt串口通信應(yīng)用研究與實(shí)現(xiàn)_嚴(yán)賢
    發(fā)表于 03-17 08:00 ?3次下載

    利用QT 串口通信進(jìn)行RS232協(xié)議開(kāi)發(fā)

    QT串口通信協(xié)議代碼最近在研究用串口通信去發(fā)送協(xié)議指令控制相機(jī)工作,因?yàn)槭堑谝淮谓佑|串口,期間也
    發(fā)表于 01-14 10:05 ?3次下載
    利用<b class='flag-5'>QT</b> <b class='flag-5'>串口</b><b class='flag-5'>通信</b>進(jìn)行RS232協(xié)議開(kāi)發(fā)

    基于Qt實(shí)現(xiàn)的串口示波器

    摘要:逛github時(shí)看到這個(gè)QT串口示波器,完全開(kāi)源,支持串口、TCP、波形顯示、通信協(xié)議。感覺(jué)很不錯(cuò),跟以前分享的那個(gè)vofa+有點(diǎn)像。感興趣的可以下載下來(lái)學(xué)習(xí)學(xué)習(xí)。
    的頭像 發(fā)表于 06-12 15:34 ?3849次閱讀

    基于QT串口小助手開(kāi)發(fā)

    QT開(kāi)發(fā)一個(gè)串口小助手,要求能實(shí)現(xiàn)串口接收,發(fā)送等基本功能。
    的頭像 發(fā)表于 04-04 15:07 ?2250次閱讀
    基于<b class='flag-5'>QT</b>的<b class='flag-5'>串口</b>小助手開(kāi)發(fā)

    QT與三菱PLC串口通信

    最近兩天在學(xué)習(xí)QT與三菱PLC串口通信,特此記錄下來(lái)。 通信格式 我這里使用RS-232C連接的,根據(jù)FX編程口協(xié)議! 設(shè)置參數(shù),以讀寫(xiě)的方式打開(kāi)
    發(fā)表于 04-17 16:08 ?0次下載
    <b class='flag-5'>QT</b>與三菱PLC<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    Qt實(shí)現(xiàn)串口通信

    要實(shí)現(xiàn)串口通信,需要知道串口通信需要的信息
    的頭像 發(fā)表于 04-23 17:34 ?4052次閱讀
    <b class='flag-5'>Qt</b>實(shí)現(xiàn)<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    基于QT簡(jiǎn)單的上位機(jī)

    。同樣的,我們也從編寫(xiě)一個(gè)簡(jiǎn)單的基于QT的上位機(jī)來(lái)體會(huì)體會(huì)上位機(jī)開(kāi)發(fā)及認(rèn)識(shí)認(rèn)識(shí)QT。我們本次實(shí)現(xiàn)的上位機(jī)的功能很簡(jiǎn)單:上位機(jī)通過(guò)串口來(lái)控制開(kāi)
    發(fā)表于 05-08 10:57 ?18次下載
    基于<b class='flag-5'>QT</b>的<b class='flag-5'>簡(jiǎn)單</b>的上位機(jī)

    QTQT上位機(jī)串口編程

    QTQT上位機(jī)串口編程 最近因?yàn)轫?xiàng)目需要,需要用到上位機(jī),通過(guò)串口與上位機(jī)進(jìn)行通訊,來(lái)上傳和下發(fā)一些數(shù)據(jù)以及控制指令,所以用QT寫(xiě)了一
    發(fā)表于 05-08 10:02 ?25次下載
    <b class='flag-5'>QT</b>篇<b class='flag-5'>QT</b>上位機(jī)<b class='flag-5'>串口</b>編程

    QT實(shí)現(xiàn)簡(jiǎn)單的上位機(jī)軟件

    最近項(xiàng)目要求寫(xiě)上位機(jī)軟件,需要實(shí)現(xiàn)界面功能和串口讀寫(xiě)。界面方面用過(guò)MFC(早忘記了),網(wǎng)上查閱資料后發(fā)現(xiàn)QT在5.1版本后有自帶的串口模塊,而且用QT實(shí)現(xiàn)
    發(fā)表于 05-08 09:54 ?4次下載
    <b class='flag-5'>QT</b>實(shí)現(xiàn)<b class='flag-5'>簡(jiǎn)單</b>的上位機(jī)軟件

    Qt5實(shí)現(xiàn)上位機(jī)與串口通信

    Qt助手內(nèi)搜索:Qt Serial Port為串口的相關(guān)函數(shù)? 1.添加串口頭文件: # include //使用串口功能# inc
    發(fā)表于 05-10 10:46 ?0次下載
    <b class='flag-5'>Qt</b>5實(shí)現(xiàn)上位機(jī)與<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    STM32單片機(jī)如何處理QT上位機(jī)串口中發(fā)過(guò)來(lái)的數(shù)據(jù)?

    數(shù)據(jù)傳輸?shù)?b class='flag-5'>通信方式。串口通信是一種簡(jiǎn)單、穩(wěn)定、可靠的通信方式,其原理是通過(guò)串口發(fā)送端口將數(shù)據(jù)轉(zhuǎn)換
    的頭像 發(fā)表于 09-14 14:22 ?3430次閱讀
    东城国际| 大发888在线娱乐百家乐| 风水做生意店铺的门| 谈谈百家乐官网赢钱技巧| bet365网站地址器| 免佣百家乐规则| 宝马会百家乐官网的玩法技巧和规则 | 百家乐投注哪个信誉好| 真人百家乐官网赌场娱乐网规则 | 澳门百家乐官网投注法| 大发888娱乐城888bg| 百家乐小钱赢钱| 足球百家乐官网系统| 澳门百家乐官网真人版| 汝南县| 365足球备用| 美国太阳城养老社区| 百家乐赌场娱乐城| 免费百家乐官网分析工具| 百家乐官网在线投注顺势法| 永利线上娱乐| 大发888真人斗地主| 马洪刚百家乐技巧| 百家乐洗码全讯网| 网址百家乐官网的玩法技巧和规则| 百家乐官网有技巧么| ,大发扑克下载| 大发888下载 df888gfxzylc8| 葡京百家乐的玩法技巧和规则 | 百家乐平注常赢玩法更| 百家乐三遍| 百家乐庄闲几率| 奇迹百家乐官网的玩法技巧和规则 | 百家乐套利| 百家乐赌博代理荐| 至尊百家乐奇热网| 百家乐的必赢术| 百家乐官网娱乐礼金| 娱乐网百家乐官网补丁| 百家乐官网注册18元体验金| 百家乐官网概率计算过程|