OpenEdv-开源电子网

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

串口问题求助各位:接收中断进不去

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-6-12
在线时间
0 小时
发表于 2015-11-5 18:40:11 | 显示全部楼层 |阅读模式
5金钱

串口驱动头文件  Bsp_Usart_Driver.h
#define GPIOA_RS485_CS_PIN    GPIO_Pin_8
#define GPIOA_RS485_TX_PIN    GPIO_Pin_9
#define GPIOA_RS485_RX_PIN    GPIO_Pin_10
#define GPIOA_RS485_SPEED     GPIO_Speed_50MHz
#define GPIOA_RS485_CS_MODE   GPIO_Mode_Out_PP
#define GPIOA_RS485_TX_MODE   GPIO_Mode_AF_PP
#define GPIOA_RS485_RX_MODE   GPIO_Mode_IN_FLOATING

typedef enum
{
    RS485_BAUDRATE_9600 =  9600,
    RS485_BAUDRATE_19200 = 19200
}Rs485_BaudRate_TypeDef;

串口驱动源文件   Bsp_Usart_Driver.c
Status_TypeDef Bsp_Usart_Init(Rs485_BaudRate_TypeDef baudRate)
{
    GPIO_InitTypeDef Gpio_InitStruct;
    USART_InitTypeDef Rs485_InitStruct;
    NVIC_InitTypeDef Nvic_InitStruct;

    /*Gpio及Usart时钟使能*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);

    /*Gpio CS,Tx,Rx配置*/
    Gpio_InitStruct.GPIO_Pin = GPIOA_RS485_CS_PIN;
    Gpio_InitStruct.GPIO_Speed = GPIOA_RS485_SPEED;
    Gpio_InitStruct.GPIO_Mode = GPIOA_RS485_CS_MODE;
    GPIO_Init(GPIOA, &Gpio_InitStruct);             // CS

    Gpio_InitStruct.GPIO_Pin = GPIOA_RS485_TX_PIN;
    Gpio_InitStruct.GPIO_Mode = GPIOA_RS485_TX_MODE;
    Gpio_InitStruct.GPIO_Speed = GPIOA_RS485_SPEED;
    GPIO_Init(GPIOA, &Gpio_InitStruct);             // Tx

    Gpio_InitStruct.GPIO_Pin = GPIOA_RS485_RX_PIN;
    Gpio_InitStruct.GPIO_Mode = GPIOA_RS485_RX_MODE;
    Gpio_InitStruct.GPIO_Speed = GPIOA_RS485_SPEED;
    GPIO_Init(GPIOA, &Gpio_InitStruct);             // Rx

    USART_DeInit(USART3);
    USART_StructInit(&Rs485_InitStruct);

    Rs485_InitStruct.USART_BaudRate = baudRate;
    Rs485_InitStruct.USART_WordLength = USART_WordLength_8b;
    Rs485_InitStruct.USART_StopBits = USART_StopBits_1;
    Rs485_InitStruct.USART_Parity = USART_Parity_No;
    Rs485_InitStruct.USART_Mode = (USART_Mode_Rx | USART_Mode_Tx);
    Rs485_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

    USART_Init(USART3,&Rs485_InitStruct);

    /*Rs485中断优先级配置 */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    Nvic_InitStruct.NVIC_IRQChannel = USART3_IRQn  ;
    Nvic_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
    Nvic_InitStruct.NVIC_IRQChannelSubPriority = 1;
    Nvic_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&Nvic_InitStruct);

    USART_ITConfig(USART3,USART_IT_RXNE, ENABLE);        //RS485接收中断
    USART_Cmd(USART3,ENABLE);

    GPIO_ResetBits(GPIOA,GPIOA_RS485_CS_PIN);           // 管脚拉低,置为接收状态

    return Status_OK;
中断头文件 :stm32f10x.h
void USART3_IRQHandler(void);
中断源文件  stm32f10x.c
void USART3_IRQHandler(void)
{
    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
    {
        Rs485_1_DealWithRxIRQ();
    }

    USART_ClearFlag(USART3, USART_FLAG_RXNE);
}
时钟配置:
Status_TypeDef Bsp_Rcc_Init(void)
{
    SystemInit();
    /*配置AHB:72Mhz,APB1:36Mhz,APB2:72Mhz*/
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    RCC_PCLK1Config(RCC_HCLK_Div2);
    RCC_PCLK2Config(RCC_HCLK_Div1);

    return Status_OK;
}

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

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-6-12
在线时间
0 小时
 楼主| 发表于 2015-11-5 18:45:03 | 显示全部楼层
用USB转串口工具,通过RS485接到板子上面,通过串口调试工具给板子发报文,程序再跑,在 串口接收中断函数里面打断点,无法进入,定时器中断啥的都能进去。理论上应该是 一发就马上进入接收中断的啊,小弟把上面的程序和 网上搜着的帖子 仔细对了好几遍 不知道哪里出问题,还望各位多多指点! 怀疑是不是系统时钟没配置对,使用的芯片是F107
回复

使用道具 举报

9

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2015-8-16
在线时间
23 小时
发表于 2015-11-5 20:24:24 | 显示全部楼层
USART_ClearFlag(USART3, USART_FLAG_RXNE);改成清除中断标志试试
回复

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-4-14
在线时间
0 小时
发表于 2015-11-5 22:10:30 | 显示全部楼层
#define GPIOA_RS485_RX_MODE   GPIO_Mode_IN_FLOATING  ?
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-6-12
在线时间
0 小时
 楼主| 发表于 2015-11-5 22:52:37 | 显示全部楼层
回复【4楼】chy712:
---------------------------------
这个定义没有看出来有啥问题啊,网上推荐的 不都是这种模式吗 RX,就是定义了个别名
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-6-12
在线时间
0 小时
 楼主| 发表于 2015-11-5 22:55:01 | 显示全部楼层
回复【4楼】chy712:
---------------------------------
回复【3楼】weiwei-wit:
---------------------------------
貌似 不是这个问题啊
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-6-12
在线时间
0 小时
 楼主| 发表于 2015-11-5 22:57:17 | 显示全部楼层
串口的这些程序 跟公司以前一些项目的文件都类似,配置也是参考一样的,小弟又逐条地反复比对了两三次,标点符号都没有放过,没有什么遗漏的地方啊,网上所说的一些问题,好像都不涉及
回复

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-4-14
在线时间
0 小时
发表于 2015-11-5 23:19:33 | 显示全部楼层
回复【5楼】钱队长:
---------------------------------
RX也得用AF模式的吧
回复

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-4-14
在线时间
0 小时
发表于 2015-11-5 23:27:16 | 显示全部楼层
回复【5楼】钱队长:
---------------------------------
哦,F4,F0才是把RX配置为AF,F1好象不一样是吧?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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