STM32F03 在定时器中断里无法通过串口发送数据

2019-07-21 08:45发布

今天下午发现一个很奇怪的问题!!! 麻烦原子哥、大神们解救小弟!

[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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。