打印
[STM32]

基于STM32F103上的232通讯问题

[复制链接]
1622|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
henyuyu123|  楼主 | 2016-11-17 14:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用232通讯,发现仿真时候,IO口接收不到数据。用示波器捕捉了下 MAX232的输出口  有时序的变化。想请问下大婶们  这个问题可能发生在什么位置,我以前是弄485的 232通讯是第一次用。不知道这两个在编程上面有什么区别?
void UART3_Init(unsigned short baudrate)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        USART_InitTypeDef USART_InitStructure;

//        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
//        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//        GPIO_Init(GPIOA, &GPIO_InitStructure);

        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
        USART_DeInit(USART3);

        USART_InitStructure.USART_BaudRate = baudrate;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;        //字长8
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//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;//打开rx跟tx功能
        USART_Init(USART3, &USART_InitStructure);//初始化
        USART_Cmd(USART3, ENABLE);//启动串口
        while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
        USART_ClearFlag( USART3, USART_FLAG_TC );//发送完成标志
}
这个是配置口
这个是优先级配置
void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        #ifdef  VECT_TAB_RAM  
        NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
        #else
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
        #endif

          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);         
          NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
          NVIC_Init(&NVIC_InitStructure);


          NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
          NVIC_Init(&NVIC_InitStructure);


//          NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  
//          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
//          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       
//          NVIC_Init(&NVIC_InitStructure);         
       
//    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
//                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;
//                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                       
//                NVIC_Init(&NVIC_InitStructure);       
   
//    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
       
    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;               
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                       
                NVIC_Init(&NVIC_InitStructure);       
   
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
}
void SYS_Init(void)
{
        uchar i;
        IO_Init();                                                                                                                        //将相关IO口初始化
        UART3_Init(9600);                                                                                                //将串口3波特率设为9600,且将其初始化
        TIM2_Int_Init(10000-1,7200-1);//1s                   //将定时器2定时时间设为1秒,并将其初始化
        TIM3_Int_Init(208-1,72-1);//20ms/96                   //将定时器3定时时间设为20/96ms,并将其初始化
//        TIM4_Int_Init(10000-1,4800-1);//0.667s        //将定时器4定时时间设为0.667s
        NVIC_Configuration();                                                                           //设置中断嵌套优先级
        RTCInit();                                                                                                                   //初始化RTC实时时钟,显示初始时间为2014年1月1日
        Iwdg_Init();                                                                                                           //初始化独立看门狗
        for(i=0;i<9;i++)
        {
                power_rule[i]=0;
                power_Delay[i]=0;
        }
               
}

相关帖子

沙发
henyuyu123|  楼主 | 2016-11-17 15:37 | 只看该作者
在仿真过程中,程序一直没有进到串口中断服务程序中。。。
void USART3_IRQHandler(void)               
{
        unsigned char UART_BUF3;
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
        {
                UART_BUF3 =USART_ReceiveData(USART3);                                       
                if(POINT3==0)                                                  
                {
                        if(UART_BUF3)      
                                Rec_BUFDATA3[POINT3] = UART_BUF3;                                
                        POINT3++;
                }
                else
                {
                        Rec_BUFDATA3[POINT3] = UART_BUF3;                                
                        POINT3++;                               
                }                                       
        }                       
}

使用特权

评论回复
板凳
henyuyu123|  楼主 | 2016-11-17 16:14 | 只看该作者
怎么都木有人呢  我自己先顶下   

使用特权

评论回复
地板
gaocuntong| | 2016-11-18 14:49 | 只看该作者
编程上区别不大
硬件电路会有些不同

无外乎硬件电路
以及寄存器配置

这种问题只能一步步排除

使用特权

评论回复
5
henyuyu123|  楼主 | 2017-6-16 11:08 | 只看该作者
问题已经解决了,是我不小心将将中断定义错误

使用特权

评论回复
6
xyy211502| | 2020-4-25 22:02 | 只看该作者
加个QQ,有事请教,409320825

使用特权

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

本版积分规则

9

主题

44

帖子

0

粉丝