串口通信 数据发送不出去

lqlyj2015 lqlyj2015 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#pragma once
#include "Windows.h"
//#include "Defines.h"
//#include "DbConnection.h"
//#include "Comm.h"
#include "stdafx.h"
#include "stdio.h"
#include "math.h"



#define REF 10000000

int main (void)
{
HANDLE m_hComm;
DCB dcb; // 串口控制块
COMMTIMEOUTS timeouts = { // 串口超时控制参数
100, // 读字符间隔超时时间: 100 ms
1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
500, // 基本的(额外的)读超时时间: 500 ms
1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
100}; // 基本的(额外的)写超时时间: 100 ms

DWORD dwNumWrite;
int freq, Fres, Intt, FRAC, MOD;
unsigned char sendBUFF[24];

while(1){

/* sendBUFF[] 内容的计算,不重要,故省略 */

m_hComm = CreateFile("COM11", // 串口名称或设备路径
GENERIC_READ | GENERIC_WRITE, // 读写方式
0, // 共享方式:独占
NULL, // 默认的安全描述符
OPEN_EXISTING, // 创建方式
0, // 不需设置文件属性
NULL); // 不需参照模板文件

if(m_hComm == NULL)
{
printf("打开串口失败");
return FALSE; // 打开串口失败
}

GetCommState(m_hComm, &dcb); // 取DCB

dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;

SetCommState(m_hComm, &dcb); // 设置DCB

SetupComm(m_hComm, 4096, 1024); // 设置输入输出缓冲区大小

SetCommTimeouts(m_hComm, &timeouts); // 设置超时


WriteFile(m_hComm, sendBUFF, 24, &dwNumWrite, NULL);

printf("发送数据量:%d\n", dwNumWrite);

}

}


运行的结果显示发送的数据为0,也就是我的sendBUFF完全没有发出去,想请问下各位大神我的代码哪里出了问题?

头文件之所以注释掉3个,是因为我参考的代码中有,但我找不到这几个文件,不用他们程序可以运行,不知是否是这个原因?

其中,判定串口是否成功打开的语句如果改成
if(m_hComm == INVALID_HANDLE_VALUE) return FALSE;  

则直接报串口打开失败
...全文

相关推荐

STM32串口DMA模式发送&接收实现,高速串口通信(1.5Mbps)不丢数据

源码来自:https://pan.quark.cn/s/a4b39357ea24 CMSIS NN Lib example armnnexamplecifar10 for Cortex-M4 and Cortex-M7. The example is configured for uVision Simulator.

dashi00258

STM32串口DMA模式发送&接收实现,高速串口通信(1.5Mbps)不丢数据

STM32高速串口通信DMA收发实现 测试平台 平台 主频 BSP库 串口 STM32F030C8T6 48MHz 标准库 UART1、UART2 STM32F103ZET6 72MHz 标准库 UART1、UART2 STM32H743XIH6 400MHz HAL/LL库 UART5 STM32F407VCT6 168MHz HAL/LL库 UART1 实现功能 收/发环形缓冲区 不定长度接收处理 高速(1.5Mbps)通信不丢数据 关键实现 DMA发送模式 线程循环查询发送环形缓冲区数据,然后启动MDA传输 DMA传输完成中断,连续发送 定时器中断周期发送 DMA接收模式 DMA缓存半满中断(如CPU硬件支持,可使用DMA双缓存机制) DMA缓存传输完成中断 串口空闲中断实现

机智的程序员zero

stm32-uart-dma:STM32串口DMA模式发送&接收实现,高速串口通信(1.5Mbps)不丢数据

STM32高速串口通信DMA收发实现 测试平台 平台 晶振 BSP库 串口 STM32F030C8T6 12MHz 标准库 UART1、UART2 STM32F103ZET6 8MHz 标准库 UART1、UART2 ... 实现功能 收/发环形缓冲区 不定长度接收处理 高速(1.5Mbps)通信不丢数据 关键实现 DMA发送模式 线程循环查询发送环形缓冲区数据,然后启动MDA传输 DMA传输完成中断,连续发送 定时器中断周期发送 DMA接收模式 DMA缓存半满中断(如CPU硬件支持,可使用DMA双缓存机制) DMA缓存传输完成中断 串口空闲中断实现 其他 更详细的描述过程参考文章

皂皂七虫

Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法

主要介绍了Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法,需要的朋友可以参考下

weixin_38687539

MFC串口通信发送16进制数据的方法

本文实例为大家分享了MFC串口通信发送16进制数据的具体代码,供大家参考,具体内容如下 MFC串口通信会使用m_mscomm控件。 发送数据一般是在edit control 里输入自己想发送的内容,然后点击send button。 如果直接发送字符串内容,通过下面代码(send button内写入)即可: UpdateData(true); //读取编辑框内容 m_mscomm.put_Output(COleVariant(m_EditSend)); m_EditSend.Empty(); //发送后清空输入框 UpdateData(false); //更新编辑框内容 但是这样发送的是字符

weixin_38631401
评论 10
收藏 已收藏
分享
返回顶部
lqlyj2015
VC/MFC 16,550 成员 421,606 内容