中级会员
 
- 积分
- 498
- 金钱
- 498
- 注册时间
- 2015-5-6
- 在线时间
- 185 小时
|
5金钱
最近做单片机串口,需要使用偶校验。代码如下:
void USART_Configuration(void)
{
//Usart1 NVIC
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//
NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; //
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //I
NVIC_Init(&NVIC_InitStructure); //
USART_InitStructure.USART_BaudRate=9600;//
USART_InitStructure.USART_WordLength=USART_WordLength_9b;//9位数据
USART_InitStructure.USART_StopBits=USART_StopBits_1;//一位停止
USART_InitStructure.USART_Parity= USART_Parity_Odd;//奇校验
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//
USART_Init(USART1,&USART_InitStructure);//
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//
USART_Cmd(USART1,ENABLE);//
USART_ClearFlag(USART1,USART_FLAG_TC);//
}
void USART1_IRQHandler(void) //?®??1????·??????ò
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //
}
if(!USART_SR_PE)//判断校验是否成功
{
// USART_ClearITPendingBit(USART1,USART_SR_PE);
UART1_REC[UART1_CNT]=USART_ReceiveData(USART1);//接收数据
UART1_CNT++;//
if(UART1_CNT>19){UART1_CNT=19;}
}
else{//USART_SR_PE=0;
//USART_ClearITPendingBit(USART1,USART_SR_PE);
USART_ClearFlag(USART1,USART_SR_PE);//清标志
}
}
为什么串口没接收数据,请教各位
|
最佳答案
查看完整内容[请看2#楼]
偶校验不是要你检查的,是由cpu自己处理的,你需要的是将这句话
USART_InitStructure.USART_Parity= USART_Parity_Odd;//奇校验
配置成偶校验模式USART_Parity_Even
|