OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4429|回复: 4

老问题,求助!!!

[复制链接]

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-7-19
在线时间
0 小时
发表于 2013-7-15 16:49:45 | 显示全部楼层 |阅读模式

 新的项目用stm32开发,用到5个串口,串口1,2,3调的都蛮顺利的,调的串口4,5,程序就挂了,去网上也找了很多资料,有说启动文件没有
DCD     UART4_IRQHandler           ; UART4
DCD     UART5_IRQHandler
,有说把sdio开启了,但是,我这个启动文件有对串口4,5的中断声明,也没把sdio开启,弄了两天,头昏眼花,想起原子论坛,赶紧到这里求助!
(参考原子程序,其他源程序已经省略,用在485通信)
void NVIC_Configuration(void)
{

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

}

void uart4_init(u32 bound)
{
    //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;
 NVIC_InitTypeDef NVIC_InitStructure;
 
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4 , ENABLE); //使能USART4,GPIOA,GPIOC时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
 USART_DeInit(UART4);  //复位串口4
  
 //USART4_EN  PA.15
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //PA.15
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA15
 USART4_EN=0; //接收状态
  //USART4_TX   PC.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PC.10
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
    GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化PC10
  
    //USART4_RX   PC.11
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOC, &GPIO_InitStructure);  //初始化Pc11


   //USART 初始化设置

 USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
 USART_InitStructure.USART_Mode = USART_Mode_Rx| USART_Mode_Tx; //收模式

    USART_Init(UART4, &USART_InitStructure); //初始化串口
 
#if EN_USART4_RX    //如果使能了接收 
   //Usart4 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //子优先级3
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能
 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
    
    USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);//开启中断
 
#endif
    USART_Cmd(UART4, ENABLE);                    //使能串口
  
}

int main(void)
 {  
   u16 t;
 u16 len;

 RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE); //开启重映射功能 能用PA15作输出口
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //关闭jtag,保留swd
 NVIC_Configuration();   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

 uart4_init(9600);  //串口4初始化为9600

 while(1)
 { 
    USART4_EN=1;
 for(t=0;t<10;t++)
 {
    while(USART_GetFlagStatus(UART4,USART_FLAG_TXE)!=SET);//等待发送结束
   USART_SendData(UART4, 0xaa);//向串口1发送数据 由于接收,发送数据一致,所以直接用接收缓冲器    
   
 } 
}
}

当不加USART4_EN=1;示波器看TX有输出波形,当加上这句,程序就跳到启动文件
CAN2_SCE_IRQHandler
OTG_FS_IRQHandler

                B       .

                ENDP
B.这个位置。
当加上USART4_EN=0;看接收信号,当有信号接收,程序也跳到B.这个位置。
关闭重映射,用其他脚使能485,同样存在这些问题。

到底是哪里问题,麻烦各位大侠指点一二...

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-7-19
在线时间
0 小时
 楼主| 发表于 2013-7-15 17:04:28 | 显示全部楼层
帖子不能沉啊,有谁能指点一下!
回复 支持 反对

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-7-19
在线时间
0 小时
 楼主| 发表于 2013-7-15 17:32:35 | 显示全部楼层
问题初步确定,去掉
//Usart4 NVIC 配置
 NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //子优先级3
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能
 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
能正常发送,但是为什么呢?希望原子能帮我分析下。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-15 20:50:18 | 显示全部楼层
串口4的中断服务函数没有实现,找不到入口,直接死机了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2012-7-19
在线时间
0 小时
 楼主| 发表于 2013-7-17 11:17:14 | 显示全部楼层
正解,正是中断地址找不到,UART4_IRQHandler写成USART4_IRQHandler,不过纳闷的是,编译是通过的。谢谢原子。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-17 18:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表