如下代码 TIM4正常中断/串口发送正常/ 串口接收中断进不去
因为TIM1/2都用做PWM了,所以只能用TIM4来做定时
TIM4初始化
/***************************************************************************
定时器4
****************************************************************************/
void TIM4_initialzation(void)
{
//16M时钟 设定计数时钟128的分频,计数周期为1ms,//初始化计数器值,设定自动重载寄存器值
TIM4_TimeBaseInit(TIM4_PRESCALER_128,125 );
TIM4_SetCounter(0x0000);//将计数器的初始值设置为0
TIM4_ARRPreloadConfig(ENABLE);
TIM4_PrescalerConfig(TIM4_PRESCALER_128, TIM4_PSCRELOADMODE_IMMEDIATE);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);//允许计数溢出中断
TIM4_Cmd(ENABLE); //启用定时器
}
void uart_initialzation(void)
{
//使能串口时钟
// GPIO_Init(GPIOD,GPIO_PIN_5,GPIO_MODE_OUT_PP_HIGH_FAST); //
// GPIO_Init(GPIOD,GPIO_PIN_6,GPIO_MODE_IN_PU_NO_IT);
UART1_DeInit();
CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE);
UART1_Init((uint32_t)115200, //波特率设定主时钟为HSI-16M
UART1_WORDLENGTH_8D, //8位数据位
UART1_STOPBITS_1, //1位停止位
UART1_PARITY_NO, //无校验
UART1_SYNCMODE_CLOCK_DISABLE, //同步模式禁止
UART1_MODE_TXRX_ENABLE); //启动收发
UART1_ITConfig(UART1_IT_RXNE, ENABLE);//允许接收中断 UART1_IT_RXNE_OR
UART1_Cmd(ENABLE); //使能UART
}
int main( void )
{
CLK_DeInit(); //寄存器复位
CLK_HSICmd(ENABLE); //内部高速时钟使能
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //分频
GPIO_initialzation();
uart_initialzation();
PWM1_initialzation();
PWM2_initialzation();
TIM4_initialzation();
// ITC_SetSoftwarePriority(ITC_IRQ_UART1_RX,ITC_PRIORITYLEVEL_2); //设为2优先级别
// ITC_SetSoftwarePriority(ITC_IRQ_TIM4_OVF,ITC_PRIORITYLEVEL_1);//设为最低级别
enableInterrupts();//* 开启总中断 */
while(1)
{
PLED_flash(499);
relay_control();
CCT_calculate();
send_information();
if(Flag_rec)
{
Flag_rec = 0;
UART_send_array(recived_data,8);
}
}
return 0;
}
只需要把 TIM4_initialzation();屏蔽,串口马上正常中断接收,
打开TIM4串口就接收不了,其它功能都正常。
那们大吓帮看看
|