找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1724|回复: 0
收起左侧

分享自己做的一个单片机串口助手和测试代码

[复制链接]
ID:904895 发表于 2022-1-7 13:26 | 显示全部楼层 |阅读模式
分享自己做的一个单片机串口助手和测试代码 欢迎评论

单片机源程序如下:
  1. #include "stm32f10x.h"

  2. void delay(int i)
  3. {
  4.         int x;
  5.         while(i--)
  6.                 for(x = 0; x < 1000; x++);
  7. }

  8. int main()
  9. {
  10.         GPIO_InitTypeDef gpio;
  11.         USART_InitTypeDef usart1;
  12.         NVIC_InitTypeDef nvic;
  13.         
  14.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //设置中断分组,只能设置一次
  15.         
  16.         //使能串口时钟
  17.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  18.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  19.         
  20.         //配置IO口为串口功能
  21.         //PA9--TX PA10--RX
  22.         gpio.GPIO_Pin = GPIO_Pin_9;
  23.         gpio.GPIO_Speed = GPIO_Speed_10MHz;
  24.         gpio.GPIO_Mode = GPIO_Mode_AF_PP;
  25.         GPIO_Init(GPIOA, &gpio);
  26.         
  27.         gpio.GPIO_Pin = GPIO_Pin_10;
  28.         gpio.GPIO_Speed = GPIO_Speed_10MHz;
  29.         gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  30.         GPIO_Init(GPIOA, &gpio);
  31.         
  32.         //设置串口属性
  33.         usart1.USART_BaudRate = 115200;
  34.         usart1.USART_WordLength = USART_WordLength_8b;
  35.         usart1.USART_StopBits = USART_StopBits_1;
  36.         usart1.USART_Parity = USART_Parity_No;
  37.         usart1.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  38.         usart1.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  39.         USART_Init(USART1, &usart1);
  40.         
  41.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  42.         
  43.         USART_Cmd(USART1, ENABLE);
  44.         
  45.         //要使用串口中断,那么就需要添加NVIC组
  46.         
  47. //        NVIC_EnableIRQ();        //开启NVIC中断
  48. //        NVIC_SetPriority();                //设置抢占优先级
  49. //        
  50.         nvic.NVIC_IRQChannel = USART1_IRQn;
  51.         nvic.NVIC_IRQChannelPreemptionPriority = 2;
  52.         nvic.NVIC_IRQChannelSubPriority = 2;
  53.         nvic.NVIC_IRQChannelCmd = ENABLE;
  54.         NVIC_Init(&nvic);
  55.         
  56.         while(1);
  57. }

  58. void USART1_IRQHandler()
  59. {
  60.         unsigned char ch;
  61.         if(USART_GetITStatus(USART1, USART_IT_RXNE)){
  62.                 //接收数据
  63.                 ch = USART_ReceiveData(USART1);
  64.                 USART_SendData(USART1, ch);
  65.         }
  66.                 //使能RCC中相应的GPIOA的时钟
  67.         *(int *)0x40021018 |= 1 << 2;
  68.         
  69.         //配置相关的引脚 GPIOA5
  70.         //推挽输出 速度10MHz
  71.         *(int *)0x40010800 &= ~(0xf << 20);
  72.         *(int *)0x40010800 |= 1 << 20;
  73.         
  74.         while(1){
  75.                 //开灯
  76.                 *(int *)0x40010810 |= 1 << 5;
  77.                 *(int *)0x40010810 &= ~(1 << 21);
  78.                 delay(1000);
  79.                 //关灯
  80.                 *(int *)0x40010810 &= ~(1 << 5);
  81.                 *(int *)0x40010810 |= 1 << 21;
  82.                 delay(1000);
  83.         }
  84. }
复制代码
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QDebug>
  4. #include <QMessageBox>

  5. Widget::Widget(QWidget *parent) :
  6.     QWidget(parent),
  7.     ui(new Ui::Widget)
  8. {
  9.     ui->setupUi(this);

  10.     ser_info = QSerialPortInfo::availablePorts();
  11.     foreach (const QSerialPortInfo &info, ser_info) {
  12.         ui->comboBox->addItem(info.portName());
  13.         qDebug() << info.portName();
  14.     }
  15. }

  16. Widget::~Widget()
  17. {
  18.     delete ui;
  19. }

  20. void Widget::on_pb_clicked()
  21. {
  22.     //打开串口
  23.     QString name = ui->comboBox->currentText();

  24.     serial.setPortName(name);
  25.     serial.setBaudRate(QSerialPort::Baud115200);
  26.     serial.setDataBits(QSerialPort::Data8);
  27.     serial.setFlowControl(QSerialPort::NoFlowControl);
  28.     serial.setStopBits(QSerialPort::OneStop);
  29.     serial.setParity(QSerialPort::NoParity);

  30.     if(serial.open(QIODevice::ReadWrite) != true){
  31.         QMessageBox::about(NULL, "警告", "打开串口失败");
  32.         return;
  33.     }
  34.     qDebug() << "serial open success";

  35.     connect(&serial, SIGNAL(readyRead()), this, SLOT(recv_data()));
  36. }

  37. void Widget::recv_data()
  38. {
  39.     ui->lineEdit_2->setText(serial.readAll());
  40. }

  41. void Widget::on_pb_send_clicked()
  42. {
  43.     serial.write(ui->lineEdit->text().toStdString().c_str());
  44. }
复制代码


51hei.png
源码下载:
Serial Port.zip (975.1 KB, 下载次数: 9)

评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表