对着书看了一整天都没发现问题....求高手点拨
开发板是MiniSTM32 V3.0,下面是代码
[mw_shl_code=c,true]//初始化串口3,波特率9600,无奇偶校验
void Usart3_Init()
{
GPIO_InitTypeDef GPI;
USART_InitTypeDef USI;
NVIC_InitTypeDef NVI;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB1Periph_USART3,ENABLE);
//配置IO口
GPI.GPIO_Mode=GPIO_Mode_AF_PP;
GPI.GPIO_Speed=GPIO_Speed_50MHz;
GPI.GPIO_Pin=GPIO_Pin_10; //TX
GPIO_Init(GPIOB,&GPI);
GPI.GPIO_Pin=GPIO_Pin_11; //RX
GPI.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB,&GPI);
//配置串口
// USART_DeInit(USART3);
USI.USART_BaudRate=(u32)9600;
USI.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USI.USART_WordLength=USART_WordLength_8b;
USI.USART_StopBits=USART_StopBits_1;
USI.USART_Parity=USART_Parity_No;
USI.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_Init(USART3,&USI);
//配置接收中断
NVI.NVIC_IRQChannel=USART3_IRQn;
NVI.NVIC_IRQChannelPreemptionPriority=3;
NVI.NVIC_IRQChannelSubPriority=3;
NVI.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVI);
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
//启用串口3
USART_Cmd(USART3,ENABLE);
// #ifdef DEBUG
// printf("InitOver"); //测试
// #endif
}[/mw_shl_code]
[mw_shl_code=c,true]//发送一个字符
void SendChar(u8 ch)
{
u16 temp=(u16)ch;
USART_SendData(USART3,temp);
// printf("Sending"); //测试
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
}
测试发现USART_GetFlagStatus(USART3,USART_FLAG_TC)返回值一直是0,而且TX(B10脚)上也没有电压变化[/mw_shl_code]
[mw_shl_code=c,true]//接收中断服务函数
void USART3_IRQHandler(void)
{
u8 temp,i;
#ifdef DEBUG
printf("InIRQ"); //测试
#endif
if(USART_GetITStatus(USART3,USART_IT_RXNE))
{
#ifdef DEBUG
printf("InRXIRQ"); //测试
#endif
temp=USART_ReceiveData(USART3);
if(temp==0xff)
{
for(i=0;i<rpos;i++)
{
printf("%d ",RecvBuf);
delay_ms(3); //保证发送完成
}
rpos=0;
}
else
{
RecvBuf[rpos]=temp;
rpos++;
if(rpos>MAXLENGTH-1)
rpos=0;
}
USART_ClearITPendingBit(USART3,USART_IT_RXNE);
#ifdef DEBUG
printf("RXIRQOver"); //测试
#endif
}
}
串口调试助手上没看见任何东西[/mw_shl_code]
|