• 软件: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源码)相关推荐

  1. 外卖优惠券返利系统外卖返利公众号搭建cps系统小程序SaaS源码

    外卖优惠券返利系统外卖返利公众号搭建cps系统小程序SaaS源码 美团/饿了么外卖CPS联盟返利公众号小程序裂变核心源码 源代码地址 https://gitee.com/caonima008/coup ...

  2. 微信小程序实例源码大全demo下载

    怎么本地测试微信小程序实例源码 1.下载源码 2.打开微信开发者工具 3.添加项目->选择本项目目录->编译执行 微信小程序实例源码大全 微信小程序游戏类demo:识色:从相似颜色中挑选不 ...

  3. 100个微信小程序的源码公开分享

    现在微信小程序越来越火,小编一直有意识地收集微信小程序源码,至今已经拥有100个小程序的源码,有gank.LOL战绩查询.百度小说.豆瓣电影.手势解锁等. 现在,小编准备将这些资料免费分享给大家! g ...

  4. thinkphp三级分销小程序源码_山东谷道微信小程序商城源码带后台 公众号平台三级分销系统...

    山东谷道微信小程序商城源码带后台 公众号平台三级分销系统 那么微信二级分销系统与微信三级分销系统到底有什么区别和联系呢?为什么改了个数字地位就天差地别? 1.微信分销模式等级的区别 用简洁的话来说,微 ...

  5. 达人探店小程序全套源码

    简介: 达人探店小程序全套源码,UI做的很简陋,分享给初学者学习一下小程序. 前台采用了微信小程序(WXML+WXSS+Javascript) 后台是IDEA开发JAVA用了spring-boot,数 ...

  6. 在线阅读试听视频小程序模板源码

    简介: 这是一款多功能带试听功能的小程序模板源码,可以在线边读边听文章,还可以在线试听音乐,收看视频等等,大家可以看演示图. 网盘下载地址: http://kekewangLuo.net/a3hxdZ ...

  7. 移通好闹钟微信小程序全套源码

    介绍: 移通好闹钟微信小程序全套源码,前端+后台+开发文档. 带视频演示文件 网盘下载地址: http://kekewl.org/ByWeMCkuZ900 图片:

  8. 微信小程序github源码大全下载

    微信小程序实例源码大全下载 微信小应用示例代码(phodal/weapp-quick) 源码链接:https://github.com/phodal/weapp-quick 微信小应用地图定位demo ...

  9. chatgpt智能问答微信小程序+后端源码+视频搭建教程

    chatgpt智能问答微信小程序+后端源码+视频搭建教程,这是一套微信小程序,后端是thinkphp框架为接口的,后端是前后端分离用elmentUI的源码框架. 小狐狸GPT付费体验系统是一款基于Th ...

最新文章

  1. 用C语言实现三子棋游戏(附上思路+项目展示+源代码)
  2. 光速AStar寻路算法(C++)
  3. centos配置ntp时间同步_Linux CentOS配置ntpd时间同步
  4. 修正IE6重复文字bug
  5. ubuntu 安装 pycharm
  6. java配合ajax加快发展_配合JAVA的AJAX使用
  7. 一套即时通讯聊天程序源码 VUE写的
  8. eclipse 配置多个tomcat
  9. json转换map多层嵌套问题
  10. c语言文件读不同格式,c语言文件的读写格式
  11. 中小企业选择仓库管理软件免费版的七大特点
  12. dubbo项目推送不能优雅停机
  13. Anaconda更新报404:UnavailableInvalidChannel: The channel is not accessible or is invalid.error404
  14. 把Word或Excel表格插入CAD中直接编辑的方法
  15. LuceneSolrElasticSearch-面试题
  16. hive 分区表select全部数据_Hive中如何快速的复制一张分区表(包括数据)
  17. Python实现布林带策略
  18. 华为伙伴暨开发者大会GaussDB,客户伙伴金融科技发展的经验之谈
  19. 程序员的自我修养——读书笔记
  20. springboot——任务处理

热门文章

  1. Avaya以1亿美元向Extreme销售网络业务
  2. 五大IT巨头 成立专利联盟
  3. SQL   PL/SQL   SQL*PLUS三者的区别
  4. Android借助Application重写App的Crash(简易版)
  5. 基于Windows Server 2008 R2的WSFC实现SQL Server 2012高可用性组(AlwaysOn Group)
  6. 动态创建模板列并绑定数据(GridView,Repeater,DataGrid)
  7. matplotlib 一张图多个图,如何在Matplotlib中绘制同一个图上的多个函数?
  8. Fiddler抓包工具详解(五)(IOS、安卓抓包+fildder插件)
  9. 中文通用百科知识图谱(CN-DBpedia)
  10. 新人如何快速上手新项目?