打印

有人用过103VE的UART4或者UART5吗?

[复制链接]
3297|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzzly|  楼主 | 2011-3-21 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yzzly 于 2011-3-21 12:12 编辑

本人用同样的初始化方式,USART1、USART2、USART3都能够正常工作,但是UART4和UART5则不能工作,都是在初始化的最后三个函数给卡住了。
USART_DeInit(UART4);
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  
NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  //使能端口C时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);      //PC11-RXD4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);      //PC10-TXD4为推挽复用输出
Txd4_Cnt=Txd4_len=Txd4_timer=0;
Rxd4_Cnt=Rxd4_len=Rxd4_timer=Flags1.Rxd4Over=0;

USART_InitStructure.USART_BaudRate = UART4_BaudRate;
if(UART4_WordLen==8)
{
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
}
else
{
  USART_InitStructure.USART_WordLength = USART_WordLength_9b;
}
if(UART4_StopBit==1)
{
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
}
else if(UART4_StopBit==2)
{
  USART_InitStructure.USART_StopBits = USART_StopBits_0_5;
}
else if(UART4_StopBit==3)
{
  USART_InitStructure.USART_StopBits = USART_StopBits_2;
}
else if(UART4_StopBit==4)
{
  USART_InitStructure.USART_StopBits = USART_StopBits_1_5;
}
if(UART4_Parity==0)
{
  USART_InitStructure.USART_Parity = USART_Parity_No;
}
else if(UART4_Parity==1)
{
  USART_InitStructure.USART_Parity = USART_Parity_Odd;
}
else if(UART4_Parity==2)
{
  USART_InitStructure.USART_Parity = USART_Parity_Even;
}
USART_InitStructure.USART_Mode = (UART4_RxEn<<2) | (UART4_TxEn<<3);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);  //使能UART4时钟
USART_Init(UART4, &USART_InitStructure);
USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
USART_ITConfig(UART4, USART_IT_TXE, ENABLE);   
USART_Cmd(UART4, ENABLE);
沙发
ST_ARM| | 2011-3-21 14:45 | 只看该作者
进入函数,单步执行,看看执行那条语句出现硬件错误中断的。

使用特权

评论回复
板凳
yzzly|  楼主 | 2011-3-21 16:16 | 只看该作者
to ST_ARM,如果对
USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
USART_ITConfig(UART4, USART_IT_TXE, ENABLE);   
USART_Cmd(UART4, ENABLE);
三个函数跟踪执行是可以通过的,但是后续语句同样无法执行而进入硬件错误中断!如果我的库不支持UART4和UART5会出现这样的情况吗?

使用特权

评论回复
地板
香水城| | 2011-3-21 16:35 | 只看该作者
你设置UART4的中断处理程序了吗?

使用特权

评论回复
5
yzzly|  楼主 | 2011-3-21 16:43 | 只看该作者
TO 香版,中断处理函数设置了
void UART4_IRQHandler(void)                                                                                //UART4中断
{
        Uint08 RxdData;
        if(UART4->SR & 0x20)                                                                                //接收中断
        {
                RxdData=USART_ReceiveData(UART4);                                                //读接收数据
        }
        if(UART4->SR & 0x80)                                                                                //发送缓冲寄存器空中断
        {   
                UART4->DR = 0x55;
/*                if(Txd4_Cnt<Txd4_len)
                {
                        UART4->DR = *Txd4_point++;
                        Txd4_Cnt++;
                  }
                else
                {
                        UART4->CR1=UART4->CR1 & (~0x80);                                        //禁止UART4的发送缓冲寄存器空中断
                }   
*/        }
}

使用特权

评论回复
6
香水城| | 2011-3-21 17:09 | 只看该作者
请确认中断处理函数UART4_IRQHandler的地址,被正确地设置在中断向量表中。

使用特权

评论回复
7
yzzly|  楼主 | 2011-3-22 08:46 | 只看该作者
谢谢香主提醒,原来是建立工程时自动拷贝的启动文件里缺少一部分向量。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

427

主题

1178

帖子

3

粉丝