本帖最后由 fengchenh 于 2009-12-1 13:16 编辑
我使用英倍特的MCBSTM32开发板,用其USART1进行收发一串数据。
我现在的问题:
串口配置:波特率1200,1个起始位,8位数字,1个EVEN校验,一个停止位
STM32配置:波特率1200,1个起始位,9位数字,1个EVEN校验,一个停止位
串口发送数据:FE 68 33 49 18 00 00 00 68 01 02 43 c7 71 16
MCU接收数据:66 59 b2 38 9a 33 a2 39 8a 38 82 30 82 30 82
串口发送的数据与MCU接收的数据两者不一致!!!
我想知道这是为什么?
PS1:
如果STM32 USART1配置为8位字长,无奇偶校验;
上位机串口软件配置同上:
STM32接收到的数据和串口软件发送数据是相同的,没有变化!
PS2:
我怀疑是不是由于STM32的校验位设置影响了所接收到的数据!STM32在USART1这里是不是有问题!
看了STM3210X的DATASHEET与reference文档。知道校验控制功能如下:发送时生成一个奇偶校验位,接收时进行奇偶校验,按理来说不会有这种问题的!
请各位兄弟帮忙找出问题的关键,在些先谢谢各位的访问与回复!
USART1配置如下:
USART_InitStructure.USART_BaudRate = 1200;
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
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_InitStructure.USART_Clock = USART_Clock_Disable;
USART_InitStructure.USART_CPOL = USART_CPOL_Low;
USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_InitStructure.USART_LastBit = USART_LastBit_Disable;
USART1 中断函数如下:
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
RxBuffer[RxCounter++] = (USART_ReceiveData(USART1) & 0x0FF);
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
if( RxCounter == 15 )
{
RxCounter = 0;
TRANS_FLAG = TRUE; //自定义标志位,当为真时,在主函数中会进入串口发送函数
}
} |