中级会员
- 积分
- 260
- 金钱
- 260
- 注册时间
- 2013-1-10
- 在线时间
- 10 小时
|
5金钱
stm8s207c8t6串口3出现无法接受数据的现象 但定时器却能正常运行 下面是我的配置 看有错吗
void TIM1_Init(void)
{
TIM1_DeInit(); //定时器1相关寄存器复位
/* param: 分频系数 向上计数 自动重载计数周期值 */
// TIM1_TimeBaseInit(64, TIM1_COUNTERMODE_UP, 125*100, 0); //中断时间100ms
TIM1_TimeBaseInit(7, TIM1_COUNTERMODE_UP, 9999, 0); //中断时间10ms
// TIM1_TimeBaseInit(8, TIM1_COUNTERMODE_UP, 1500, 0); //中断时间ms
TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);
ITC_SetSoftwarePriority(ITC_IRQ_TIM1_OVF, ITC_PRIORITYLEVEL_2);//设置d定时器中断优先级 2
TIM1_Cmd(ENABLE); //使能TIM1
}
/*! @function
********************************************************************************
<RE>
函数名 :TIM2_Init
功能 :485通信管理50ms
说明 :Sys_Clk/(8)x(19999+1) = 20ms
*******************************************************************************/
void TIM2_Init(void)
{
TIM2_DeInit();
TIM2_TimeBaseInit(TIM2_PRESCALER_1, 125*20);//20ms中断
TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); //使能中断
ITC_SetSoftwarePriority(ITC_IRQ_TIM2_OVF, ITC_PRIORITYLEVEL_2);//设置d定时器中断优先级 2
TIM2_Cmd(ENABLE);//使能定时器1
}
void UART_Init3()
{
UART3_DeInit();
UART3_ITConfig(UART3_IT_TXE, DISABLE); //关串口发送中断
UART3_ITConfig(UART3_IT_TC , DISABLE); //关串口发送结束中断
UART3_ITConfig(UART3_IT_RXNE_OR, ENABLE); //使能溢出错误检测标志位
UART3_Init((u32)9600, UART3_WORDLENGTH_8D, UART3_STOPBITS_1, UART3_PARITY_NO, UART3_MODE_TXRX_ENABLE);
UART3_Cmd(ENABLE); //打开串口接收中断
}
#pragma vector=ITC_IRQ_UART3_RX + 2
__interrupt void Uart3RxdInt(void)
{ //此函数内已完成清中断标志
u8 ret;
if(UART3_GetITStatus(UART3_IT_RXNE)==SET)
{
tmp=UART3_ReceiveData8();
ret=UART_KbdPkgRead(tmp);
if(ret==0)
{
KBD_Flag_RECE=1;//当标志位为1时说明已经接收1包数据 定时器响应后判断此标志位
}
UART3_GetFlagStatus(UART3_FLAG_OR_LHE );
}
}
串口3和定时器1 2 的优先级都一样,求助
|
最佳答案
查看完整内容[请看2#楼]
我这里有个 我自己写的程序 你可以看一下 我用的是 寄存器版本的 毕竟STM8资源不是很多 就没用库了
|