打印

求救STM32 使用库 串口接收中断打死也进不去

[复制链接]
3027|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子尘埃|  楼主 | 2010-12-26 21:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
附上部份代码.

USART_InitTypeDef
USART_InitStructure;
RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
LcdShow_Init();
//StepperMotorInit();
// GPIO_Write(GPIOC,GPIO_ReadOutputData(GPIOC)|LED_var);
/* USART2 配置*/
USART_InitStructure.USART_BaudRate
=
9600;
USART_InitStructure.USART_WordLength
=
USART_WordLength_8b;//8位数据位
USART_InitStructure.USART_StopBits
=
USART_StopBits_1;
//1个停止位
USART_InitStructure.USART_Parity
=
USART_Parity_Even;//USART_Parity_No 偶校验
USART_InitStructure.USART_HardwareFlowControl
=
USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode
=
USART_Mode_Rx
|
USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);
//使能USART2中断
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
/* Enable the USART2 */
USART_Cmd(USART2, ENABLE);
沙发
电子尘埃|  楼主 | 2010-12-26 21:21 | 只看该作者
噢我的天呀,怎么一下子就两个上去了

使用特权

评论回复
板凳
电子尘埃|  楼主 | 2010-12-26 21:22 | 只看该作者
噢我的天呀,怎么一下子就两个上去了

使用特权

评论回复
地板
电子尘埃|  楼主 | 2010-12-26 21:22 | 只看该作者
/*------------------------------------------------------------------------------

            外设时钟初始化

------------------------------------------------------------------------------*/
void RCC_Configuration(void)
{
        // Enable GPIOC clock
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
                               | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
                               | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,
                               ENABLE);   
        //clocks enable
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3
                               | RCC_APB1Periph_TIM4 | RCC_APB1Periph_USART2,
                               ENABLE);   
}

使用特权

评论回复
5
电子尘埃|  楼主 | 2010-12-26 21:23 | 只看该作者
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        //TIM3全部重映像就是把4通道全部变到PC6-PC9,部份重映像就是把通道1与2重映像到PB4-5
        GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        /* Configure PC.04 -- PC.11 as Output push-pull */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5
                                      | GPIO_Pin_10 | GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        /* Configure PD.03, PC.04, PC.11 -- PC.15 as input floating */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_11 | GPIO_Pin_12 |
                                      GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        //改变指定管脚的映射
        GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
        /* Configure USART2 Tx (PD.05) as alternate function push-pull */
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出        
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        /* Configure USART2 Rx (PD.06) as input floating */        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        /* Configure PE.00 -- PE.15 as Output push-pull */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOE, &GPIO_InitStructure);
}

使用特权

评论回复
6
电子尘埃|  楼主 | 2010-12-26 21:24 | 只看该作者
void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM
        /* Set the Vector Table base location at 0x20000000 */
        NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
        /* Set the Vector Table base location at 0x08000000 */
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif

        /* Configure the Priority Group to 2 bits */
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 选择使用优先级分组第2组

        //使能中断并指定优先级
        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;// 指定抢占式优先级别0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //指定响应优先级别1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        /* Enable the USART2 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;                 
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
/*
    NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;// 指定抢占式优先级别0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //指定响应优先级别1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);    */
}

使用特权

评论回复
7
电子尘埃|  楼主 | 2010-12-26 21:25 | 只看该作者
/*******************************************************************************
* Function Name  : USART2_IRQHandler
* Description    : This function handles USART2 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USART2_IRQHandler(void)
{
        if ( USART_GetITStatus(USART2, USART_IT_RXNE) != RESET ) {
                RxBuffer[RxCounter++] = (USART_ReceiveData(USART2) & 0x7F);         
                USART_ClearITPendingBit(USART2, USART_IT_RXNE);
                if ( RxCounter == RxBufferSize ) {
                        USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
                }
        }
}
//*/

使用特权

评论回复
8
电子尘埃|  楼主 | 2010-12-26 21:27 | 只看该作者
就是一直进不去最后一个函数里,实在是搞不灵清是怎么与这个函数挂上沟的.看库代码,转来转去一下,头一下子就大起来了

使用特权

评论回复
9
电子尘埃|  楼主 | 2010-12-26 22:17 | 只看该作者
一个好心人帮我也没有吗?心拨凉拨凉呀

使用特权

评论回复
10
电子尘埃|  楼主 | 2010-12-26 23:27 | 只看该作者
哎,小样的,俺就不信了,就这么个破东西搞不定他,搞不定晚上不睡,特立此贴为凭!

使用特权

评论回复
11
电子尘埃|  楼主 | 2010-12-26 23:46 | 只看该作者
搞定,现在还有点小问题,
USART_SendData(USART2,0x7f);
为什么串口助手收到是0xff;

使用特权

评论回复
12
batsong| | 2010-12-27 08:33 | 只看该作者
我没用过stm32,但我记得以前有人说设置成9位模式,才能收八位字节

使用特权

评论回复
13
linl| | 2010-12-27 11:41 | 只看该作者
搞定了吗

使用特权

评论回复
14
eydj2008| | 2010-12-27 19:49 | 只看该作者
很容易的 楼主 主要是别急  慢慢来  
“路漫漫其修远兮,吾将上下而求索”

1.RCC_Configuration
2.GPIO_Configuration
3.NVIC_Configuration
4.USART_Configuration
5.IRQHandler

使用特权

评论回复
15
kk5290122| | 2013-8-12 21:28 | 只看该作者
电子尘埃 发表于 2010-12-26 23:46
搞定,现在还有点小问题,
USART_SendData(USART2,0x7f);
为什么串口助手收到是0xff;

lz搞定了吗??、

使用特权

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

本版积分规则

51

主题

444

帖子

0

粉丝