USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
// USART_ITConfig(USART1,USART_IT_TEX ,ENABLE);
//不使能这个串口正常,使能就进不了while(1){};??
int main(void)
{
uint8_t a[]="start";
NVIC_Config();
USART1_Config();
putstr(a);
putstr("good");
while(1)
{
putstr("good");
} ;
}
//中断函数
void putch(uint8_t ch)
{
USART_SendData(USART1, ch); /*发送一个字符函数*/
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);/*等待发送完成*/
}
void putstr(uint8_t *str)
{
uint16_t i;
for(i=0;str
!=' ';i++)
{
putch(str);
}
USART_SendData(USART1, '
'); /*发送一个字符函数*/
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);/*等待发送完成*/
USART_SendData(USART1, '
'); /*发送一个字符函数*/
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);/*等待发送完成*/
}
void USART1_IRQHandler(void)
{
//处理接收到的数据
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
//temp = USART_ReceiveData(USART1);
putstr(sdata);
}
//发送中断
if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_TXE);
}
}
这是什么原因呢??
此帖出自小平头技术问答
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);/*等待发送完成*/
USART_FLAG_TC需要软件清除,你的里面好像没有清除,没有清除就没有等待,发完一个就直接下一个。
最好还是用USART_FLAG_TXE
我使能USART_ITConfig(USART3, USART_IT_TC, ENABLE)程序就不跑了
一周热门 更多>