今天下午发现一个很奇怪的问题!!! 麻烦原子哥、大神们解救小弟!
[mw_shl_code=c,true]void Show_Word()
{
u8 i;
for(i=0;i<6;i++){
USART1->DR=word;
while((USART1->SR&0X40)==0);
}
}[/mw_shl_code]
这是串口字符串发送程序。把它放在 main 函数里没有问题 正常运行,但是我把它放在定时器中断里就发送不了了?
[mw_shl_code=c,true]void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET){
X_tim++;
Show_Wor_Count(X_tim);
Show_Word();
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
}[/mw_shl_code]
下面是 定时器配置 和串口配置
[mw_shl_code=c,true]void X_Pwm_Init(u16 coe,u16 sta)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Prescaler=coe;
TIM_TimeBaseInitStructure.TIM_Period=sta;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2,ENABLE);
TIM_Cmd(TIM2,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStructure);
}[/mw_shl_code]
[mw_shl_code=c,true]void Uart_Init(void)
{
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStructure);
}[/mw_shl_code]
没用到串口中断。
每次进入定时器中断后 X_tim++; 然后我想直接用串口发送出去 但是不好使啊,后来发现如果把
[mw_shl_code=c,true]while((USART1->SR&0X40)==0);[/mw_shl_code]
[mw_shl_code=c,true]去掉 在定时器里可以发送,但是发出来的是乱码,我知道这句代码是不可以去掉的,但是就是不好使啊 无法发送啊 ,定时器还正常跑。[/mw_shl_code]
[mw_shl_code=c,true]大神们帮帮小弟吧! [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>