Delphi 串口使用校验位
2016-05-10 15:24
507 查看
平时都用的8N1的模式,这次使用了校验位,因此串口的初始化工作需要改变
#ifdef RT_USING_UART2
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
USART_InitStructure.USART_StopBits = USART_StopBits_2;
USART_InitStructure.USART_Parity = USART_Parity_Even;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
USART_Init(USART2, &USART_InitStructure);
USART_ClockInit(USART2, &USART_ClockInitStructure);
/* register uart2 */
rt_hw_serial_register(&uart2_device, "uart2",
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
&uart2);
/* Enable USART2 DMA Rx request */
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
#endif
这里最重要的是
USART_WordLength_9b
这个字段意思是字的长度,没有校验位的时候是8位,有了之后要加一位。因此,这不代表数据的长度……真坑
还要多些网友的帮助,详见
http://www.rt-thread.org/phpBB3/viewtopic.php?f=2&t=2960&p=16419#p16419
#ifdef RT_USING_UART2
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
USART_InitStructure.USART_StopBits = USART_StopBits_2;
USART_InitStructure.USART_Parity = USART_Parity_Even;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
USART_Init(USART2, &USART_InitStructure);
USART_ClockInit(USART2, &USART_ClockInitStructure);
/* register uart2 */
rt_hw_serial_register(&uart2_device, "uart2",
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
&uart2);
/* Enable USART2 DMA Rx request */
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
#endif
这里最重要的是
USART_WordLength_9b
这个字段意思是字的长度,没有校验位的时候是8位,有了之后要加一位。因此,这不代表数据的长度……真坑
还要多些网友的帮助,详见
http://www.rt-thread.org/phpBB3/viewtopic.php?f=2&t=2960&p=16419#p16419
相关文章推荐
- Delphi 串口通信数据位长度对传输数据的影响 转
- Delphi Dll插件窗体中遇到的各种问题
- Delphi Val函数
- DELPHI美化界面
- DELPHI-线程的终止和退出
- delphi中多线程排序
- delphi 四舍五入取整函数
- 内核读写只读内存方法总结[Delphi描述]
- delphi线程的创建、挂起、激活与终止
- delphi概念性学习(一)
- delphi的文件夹监控控件,直接封装成可视化的控件,拖一下即可代码。核心为:ReadDirectoryChangesW
- Delphi ADO访问数据库
- Delphi xe 下快捷使用 FastMM 的内存泄露检测功能
- 用DELPHI中实现RAR文件解压到指定一目录
- Delphi 10.1 Berlin UTF8String Test
- 彻底删除Delphi中ActiveX面板中的第三方控件
- 《borland 传奇》原书及阅读器
- delphi中DDE通信技术
- delphi7如何实现 科学计数的转换。 比如我输入2,触发之后会转换成2.000000E+00.求赐教
- Delphi 调用串口例子