新手上路
- 积分
- 23
- 金钱
- 23
- 注册时间
- 2020-11-4
- 在线时间
- 4 小时
|
2金钱
如题,请教各位前辈,在main.c加上while(1){}死循环之后,XCOM的输出数据为正常,一旦去掉while死循环,就会产生输出乱码的问题,请教一下这里面涉及的原理问题。原程序如下:
//////////////////////////////////////////////////////////////////////////////////主函数main.c:
#include "stm32f10x.h"
#include "usart_IRQ.h"
int main(void)
{
usart_IRQ();
while(1){} //这个死循环去掉,数据输出就会乱码
}
///////////////////////////////////////////////////////////////////////////////IO口、串口、中断初始化函数:
#include "stm32f10x.h"
#include "stm32f10x_it.h"
void NVIC_STR(){
NVIC_InitTypeDef NVIC_STRCTURE;
NVIC_STRCTURE.NVIC_IRQChannel=USART1_IRQn;
NVIC_STRCTURE.NVIC_IRQChannelPreemptionPriority=2;
NVIC_STRCTURE.NVIC_IRQChannelSubPriority=2;
NVIC_STRCTURE.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_STRCTURE);
}
void usart_IRQ(){
GPIO_InitTypeDef GPIO_STR;
USART_InitTypeDef USART_STR;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
GPIO_STR.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_STR.GPIO_Pin=GPIO_Pin_9;
GPIO_STR.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_STR);
GPIO_STR.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_STR.GPIO_Pin=GPIO_Pin_10;
GPIO_Init(GPIOA,&GPIO_STR);
USART_STR.USART_BaudRate=115200;
USART_STR.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_STR.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
USART_STR.USART_Parity=USART_Parity_No;
USART_STR.USART_StopBits=USART_StopBits_1;
USART_STR.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_STR);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_STR();
USART_Cmd(USART1,ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
}
/////////////////////////////////////////////////////////////////////////////////////////中断服务函数
void USART1_IRQHandler(){
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!=RESET)
{uint8_t usart_value;
USART_ClearFlag(USART1,USART_FLAG_RXNE);
usart_value=USART_ReceiveData(USART1);
USART_SendData(USART1,usart_value);
}
}
|
最佳答案
查看完整内容[请看2#楼]
如果裸机例程没有死循环,芯片会一直复位重新运行,还有你的串口发送数据,没有加等待发送完毕,这些会导致数据乱码
|