日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

stm32CAN波特率计算小程序(QT源码)

發布時間:2024/10/14 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32CAN波特率计算小程序(QT源码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 軟件:Qt Creator
  • 開發環境:Window7

用qt做得一個計算波特率的小程序,在實際的應用中我們設置波特率的時候是通過以下參數來定的:

CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_9tq; CAN_InitStructure.CAN_BS2=CAN_BS2_6tq; CAN_InitStructure.CAN_Prescaler=5;

波特率計算小程序的截圖:

根據所需的的采樣點、波特率以及錯誤率得到以上外設初始化所需的參數。

據網上資料,采樣點的設置有以下規律:

75% when 波特率 > 800K 80% when 波特率 > 500K 87.5% when 波特率 <= 500K

下面附上部分qt的源代碼:

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QStandardItemModel> #include <qDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);m_model=new QStandardItemModel;m_model->setColumnCount(6);/*設置表頭信息*/m_model->setHeaderData(0,Qt::Horizontal,QString::fromUtf8("BS1"));m_model->setHeaderData(1,Qt::Horizontal,QString::fromUtf8("BS2"));m_model->setHeaderData(2,Qt::Horizontal,QString::fromUtf8("BRP"));m_model->setHeaderData(3,Qt::Horizontal,QString::fromUtf8("Sample Point"));m_model->setHeaderData(4,Qt::Horizontal,QString::fromUtf8("Baud Rate"));m_model->setHeaderData(5,Qt::Horizontal,QString::fromUtf8("Error"));ui->tableView->setModel(m_model);//將這個model套用到tableview上ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);//鼠標點擊就會選中整行ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//列表內容不可編輯}MainWindow::~MainWindow() {delete ui,m_model; }int MainWindow::getUsrValue(QString str)//提取控件當前text字符串中的數字 {QString tmp;for(int j = 0; j < str.length(); j++){if(str[j] >= '0' && str[j] <= '9')tmp.append(str[j]);}return tmp.toInt(); } float MainWindow::getAbsolutevalue(float num1,float num2)//求絕對值 {return (num1>num2)?(num1-num2):(num2-num1); } void MainWindow::putResult_Row(int i,int j,int tempBrp,float SamplePoint,float BaudRate,float Error)//輸出打印一行的結果 {m_model->setItem(row,0,new QStandardItem(QString("CAN_BS1_%1tq").arg(i)));m_model->setItem(row,1,new QStandardItem(QString("CAN_BS2_%1tq").arg(j)));m_model->setItem(row,2,new QStandardItem(QString::number(tempBrp)));m_model->setItem(row,3,new QStandardItem(QString::number(SamplePoint*100,'f',1)+"%"));m_model->setItem(row,4,new QStandardItem(QString::number(BaudRate,'f',1)));m_model->setItem(row,5,new QStandardItem(QString::number(Error,'f',1)+"%"));row++; } void MainWindow::on_pushButton_clicked() //當按鈕按下時執行的函數 {int i,j,tempBrp,tempBrp1,tempBrp2;float SamplePoint,BaudRate,Error;row=0;m_model->removeRows(0,m_model->rowCount());UsrSP_value=this->getUsrValue(ui->comboBox->currentText());UsrER_value=this->getUsrValue(ui->comboBox_2->currentText());UsrAPB_value=ui->lineEdit->text().toFloat();UsrBR_value=ui->lineEdit_2->text().toFloat();for(i=1;i<17;i++) //BS1的范圍 1-16{for(j=1;j<9;j++) //BS2的范圍 1-8{SamplePoint=(1+i*1.0)/(1+i*1.0+j*1.0); //求出采樣點if((SamplePoint*100)>=(float)UsrSP_value) //滿足采樣點所設要求則進入下一步篩選{tempBrp=UsrAPB_value*1000/((1+i+j)*UsrBR_value); //求出分頻if(tempBrp>1){//qDebug() <<tempBrp <<i <<j;BaudRate=(UsrAPB_value*1000)/(tempBrp*(1+i+j)*1.0); //求出實際波特率//qDebug() <<BaudRate;Error=(this->getAbsolutevalue(BaudRate,UsrBR_value)/UsrBR_value)*100;//求出錯誤率//qDebug() <<Error <<"%" <<endl;if(Error>UsrER_value) continue; //如果錯誤率大于要求的 則放棄這一次循環輸出 直接跳到下一次循環this->putResult_Row(i,j,tempBrp,SamplePoint,BaudRate,Error);}tempBrp1=tempBrp;tempBrp2=tempBrp;/*分別向tempBrp正反方向拓展 尋找更多合適的tempBrp*/while(tempBrp1--){if(tempBrp1<2) break;//qDebug() <<tempBrp <<i <<j;BaudRate=(UsrAPB_value*1000)/(tempBrp1*(1+i+j)*1.0); //求出實際波特率//qDebug() <<BaudRate;Error=(this->getAbsolutevalue(BaudRate,UsrBR_value)/UsrBR_value)*100;//求出錯誤率//qDebug() <<Error <<"%" <<endl;if(Error>UsrER_value) break; //如果錯誤率大于要求的 則跳出while循環this->putResult_Row(i,j,tempBrp1,SamplePoint,BaudRate,Error);}while(tempBrp2++){//qDebug() <<tempBrp <<i <<j;BaudRate=(UsrAPB_value*1000)/(tempBrp2*(1+i+j)*1.0); //求出實際波特率//qDebug() <<BaudRate;Error=(this->getAbsolutevalue(BaudRate,UsrBR_value)/UsrBR_value)*100;//求出錯誤率//qDebug() <<Error <<"%" <<endl;if(Error>UsrER_value) break; //如果錯誤率大于要求的 則跳出循環this->putResult_Row(i,j,tempBrp2,SamplePoint,BaudRate,Error);}}}} }

所用到的計算公式該博客,點擊跳轉。
需要源代碼的,點擊可下載。

僅供參考,錯誤之處以及不足之處還望多多指教。

總結

以上是生活随笔為你收集整理的stm32CAN波特率计算小程序(QT源码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产传媒国产传媒 | 青青草原在线免费观看视频 | 91插插插插插插插 | 日韩一区二区a片免费观看 伊人网综合在线 | 亚洲大片精品 | 星铁乱淫h侵犯h文 | 国产美女毛片 | 天天射综合| 日本亚洲一区二区三区 | 免费观看在线播放 | 91久久国产综合久久91 | 色屋在线| 亚洲91网| 国产伦精品一区二区三区视频黑人 | 欧美两根一起进3p做受视频 | 天天操天天干天天爱 | 国产av日韩一区二区三区精品 | 亚洲女人天堂 | 中文字幕av一区二区三区人妻少妇 | 国产精品拍拍 | 男男黄色片 | 免费看黄色网址 | 色吊丝av中文字幕 | 欧美亚洲高清 | 成人永久免费 | 日本不卡一区视频 | 亚洲欧美一区二区三区四区五区 | 精品无码一区二区三区蜜臀 | 欧美一区二区三区啪啪 | 日本高清黄色 | 欧美男人亚洲天堂 | 亚洲综合网在线观看 | 国产精品毛片久久久久久久av | 久久久久久久综合色一本 | 日本性高潮视频 | 亚洲精品动漫在线观看 | 精品欧美一区二区久久久久 | 成人做爰69片免费 | 3d毛片| 福利综合网 | 中文字幕无码精品亚洲资源网久久 | 欧美人与性动交α欧美片 | 成人乱人乱一区二区三区一级视频 | 狂野少女电影在线观看国语版免费 | 国产黄色激情视频 | 日本一区二区三区视频在线播放 | 性开放耄耋老妇hd | 天天射日日干 | 国产黄色影院 | 成人免费一区二区三区 | 青青青手机在线视频 | 什么网站可以看毛片 | 久久久久亚洲av片无码v | 老熟妇午夜毛片一区二区三区 | 一区二区三区av夏目彩春 | 91综合在线| 男女啪啪免费看 | 99热影院 | 91亚洲成人 | 天堂中文在线最新 | 先锋资源一区 | 成人黄页| 中文国产视频 | 亚洲视频在线观看一区二区 | 久久久久亚洲色欲AV无码网站 | 成人蜜桃av| 国产大片黄 | 国产精品久久久久久影视 | 久草免费在线视频观看 | 91丝袜呻吟高潮美腿白嫩 | 在线精品一区 | 自拍偷拍国产精品 | 亚洲av无码专区首页 | www亚洲色图 | 高跟91白丝 | 视频一区二区在线观看 | 成年人黄色在线观看 | 在线色播| 一二三在线视频 | 黄色大片视频网站 | 亚洲三级中文字幕 | 在线国产一区二区三区 | 九九看片 | 人人澡人人添 | 黄色片视频 | 中文字幕少妇在线三级hd | 国产玖玖视频 | 久久免费资源 | 一级做a爰片久久毛片 | 一级黄色免费看 | 亚洲福利网站 | 国产真实乱偷精品视频 | 亚洲mv一区 | 少妇特黄a一区二区三区88av | av高清在线| 老头老夫妇自拍性tv | 日本视频免费看 | 51精品 | 欧美激精品 |