OpenEdv-开源电子网

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

老哥们,我在配置STM32F103C8T6的串口3,但是我真的感觉已经没有什么问题了,但是就是不能和串口助手通信

[复制链接]

20

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-5-6
在线时间
43 小时
发表于 2020-5-13 15:27:11 | 显示全部楼层 |阅读模式
3金钱
老哥们,我在配置STM32F103C8T6的串口3,但是我真的感觉已经没有什么问题了,但是就是不能和串口助手通信不管我事用的原来的PB10 11,还是重映射到PC10 11 都不行。USB转TTL自发自收没问题。结合电路图RX TX连接也没问题。求助

#include "sys.h"
#include "usart.h"          

#if SYSTEM_SUPPORT_UCOS
#include "includes.h"                                                  
#endif
          
  
#if 1
#pragma import(__use_no_semihosting)            
           
struct __FILE
{
        int handle;


};


FILE __stdout;      
void _sys_exit(int x)
{
        x = x;
}

int fputc(int ch, FILE *f)
{      
        while((USART3->SR&0X40)==0){};//Ñ-»··¢Ëí,Ö±μ½·¢Ëííê±Ï   
  USART3->DR = (u8) ch;      
        return ch;
}
#endif


/*ê1óÃmicroLibμÄ·½·¨*/
  
//int fputc(int ch, FILE *f)
//{
//        USART_SendData(USART3, (uint8_t) ch);


//        while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET) {}       
//   
//    return ch;
//}
//int GetKey (void)  {


//    while (!(USART1->SR & USART_FLAG_RXNE));


//    return ((int)(USART3->DR & 0x1FF));
//}



#if EN_USART3_RX  

u16 USART_RX_STA=0;       //½óêÕ×′쬱ê¼Ç          
  
void uart_init(u32 bound){

    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    //RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART3|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);        //串口3本来应该的引脚配置
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);         //′ò¿aê±Öó
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); //重映射后GPIOC10,11
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);//
        GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE);


    GPIO_StructInit(&GPIO_InitStructure);          
    //USART3_TX   PB.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //¸′óÃíÆíìêä3ö
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    //USART3_RX          PB.11
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë
    GPIO_Init(GPIOC, &GPIO_InitStructure);  
    //Usart1 NVIC ÅäÖÃ
    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//ÇàÕ¼óÅÏè¼¶3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;                //×óóÅÏè¼¶4
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
    NVIC_Init(&NVIC_InitStructure);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷
    //USART 3õê¼»ˉéèÖÃ
    USART_InitStructure.USART_BaudRate = bound;//ò»°ãéèÖÃÎa9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½
    USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
    USART_InitStructure.USART_Parity = USART_Parity_No;//ÎTÆæÅ¼D£Ñéλ
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //êÕ·¢Ä£ê½
    USART_Init(USART3, &USART_InitStructure); //3õê¼»ˉ′®¿ú
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿aÆôÖD¶Ï
    USART_Cmd(USART3, ENABLE);  


}


void USART3_IRQHandler(void)                        //′®¿ú3ÖD¶Ï·tÎñ3ìDò
        {
        u8 Res;
#ifdef OS_TICKS_PER_SEC                 //èç1ûê±Öó½úÅÄêy¶¨òåáË,ËμÃ÷òaê1óÃucosIIáË.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
                {
                Res =USART_ReceiveData(USART3);//(USART3->DR);        //¶á衽óêÕμ½μÄêy¾Y
                printf("USART3:%c\n",Res);
                if((USART_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
                        {
                        if(USART_RX_STA&0x4000)//½óêÕμ½áË0x0d
                                {
                                if(Res!=0x0a)USART_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
                                else USART_RX_STA|=0x8000;        //½óêÕíê3éáË
                                }
                        else //»1ûêÕμ½0X0D
                                {       
                                if(Res==0x0d)USART_RX_STA|=0x4000;
                                else
                                        {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ          
                                        }                 
                                }
                        }                    
     }
#ifdef OS_TICKS_PER_SEC                 //èç1ûê±Öó½úÅÄêy¶¨òåáË,ËμÃ÷òaê1óÃucosIIáË.
        OSIntExit();                                                                                           
#endif
}
#endif       



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

使用道具 举报

0

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-13 15:27:14 | 显示全部楼层
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-5-13 17:11:39 | 显示全部楼层
看不出啥问题,自己在线跑起来查看寄存器值是否有问题,倒推找原因
一分耕耘一分收获。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 15:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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