OpenEdv-开源电子网

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

请教原子哥:STM32F103RCT6的串口5配置问题

[复制链接]

20

主题

138

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
346
金钱
346
注册时间
2012-10-11
在线时间
136 小时
发表于 2014-6-26 21:31:07 | 显示全部楼层 |阅读模式
5金钱
我想问一下STM32F103RCT6的串口5怎么配置?我配置的串口5不能用,程序直接卡住了运行不了。

最佳答案

查看完整内容[请看2#楼]

顺便也分享一下! 源码: void USART5_Config(u32 baud) {    GPIO_InitTypeDef GPIO_InitStructure;    USART_InitTypeDef USART_InitStructure;      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);  //使能UART5所在GPIOC的时钟     RCC_APB1PeriphC ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

138

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
346
金钱
346
注册时间
2012-10-11
在线时间
136 小时
 楼主| 发表于 2014-6-26 21:31:08 | 显示全部楼层
顺便也分享一下!
源码:
void USART5_Config(u32 baud)
{
   GPIO_InitTypeDef GPIO_InitStructure;
   USART_InitTypeDef USART_InitStructure;  


  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);  //使能UART5所在GPIOC的时钟 
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);  //使能串口5时钟

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;           //USART5 TX
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //复用推挽输出
   GPIO_Init(GPIOC, &GPIO_InitStructure);       //c端口 

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;            //USART5 RX
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //复用开漏输入
   GPIO_Init(GPIOD, &GPIO_InitStructure);            //D端口 
  
   USART_InitStructure.USART_BaudRate   = baud;
   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; //收发模式
  
   /* Configure USART3 */
   USART_Init(UART5, &USART_InitStructure); //配置串口参数函数 
  
   /*USART3 receive data register is not empty */
   USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);  
   /* Enable the USART3 */
   USART_Cmd(UART5, ENABLE);   
}
而中断服务函数与其他串口的中断服务函数一样!
在调试过程中好像碰到一个问题:uart5的TX和RX引脚如果没与MAX3232芯片的连接的话悬空,程序会卡住,但是与MAX3232芯片的连接的话,程序运行就正常了,不知道为什么!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-6-26 22:59:29 | 显示全部楼层
仿真看看死 在哪里?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

138

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
346
金钱
346
注册时间
2012-10-11
在线时间
136 小时
 楼主| 发表于 2014-6-27 10:20:57 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
                    复用                                                 I/O重映射
        C12  UART5_TX/SDIO_CK                         USART3_CK
        D2   TIM3_ETR/UART5_RX\SDIO_CMD
配置如下:
   GPIO_InitTypeDef GPIO_InitStructure;
   USART_InitTypeDef USART_InitStructure;  


  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);  //使能UART5所在GPIOC的时钟 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);  //使能UART5所在GPIOD的时钟
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);  //使能串口5时钟

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;           //USART5 TX
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //复用推挽输出
   GPIO_Init(GPIOC, &GPIO_InitStructure);       //c端口 

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;            //USART5 RX
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //复用开漏输入
   GPIO_Init(GPIOD, &GPIO_InitStructure);            //D端口 
  
   USART_InitStructure.USART_BaudRate   = baud;
   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; //收发模式
  
   /* Configure USART3 */
   USART_Init(UART5, &USART_InitStructure); //配置串口参数函数 
  
   /*USART3 receive data register is not empty */
   USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);  
   /* Enable the USART3 */
   USART_Cmd(UART5, ENABLE);

不知道配置错在哪里
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-6-27 23:24:23 | 显示全部楼层
中断服务函数在哪里?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

138

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
346
金钱
346
注册时间
2012-10-11
在线时间
136 小时
 楼主| 发表于 2014-7-15 10:09:00 | 显示全部楼层
不好意思啊,现在才回复,已经调试好了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-7-15 23:56:09 | 显示全部楼层
回复【6楼】我乐意:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-1-5
在线时间
0 小时
发表于 2015-1-5 15:18:10 | 显示全部楼层
回复【6楼】我乐意:
---------------------------------
谢谢分享呀,,老乡呀
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2015-2-8
在线时间
8 小时
发表于 2016-5-11 13:59:53 | 显示全部楼层
我也遇到同样的问题了  ,兄弟们
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-5-13
在线时间
0 小时
发表于 2016-6-1 15:27:12 | 显示全部楼层
心情朗,就看得到永远
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-5-13
在线时间
0 小时
发表于 2016-6-1 15:28:20 | 显示全部楼层
我也遇到了同样的问题  不知道怎么调好了  有木有教教我的啊

心情朗,就看得到永远
回复

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-5-11
在线时间
16 小时
发表于 2016-8-30 09:37:40 | 显示全部楼层
我乐意 发表于 2014-7-15 10:09
不好意思啊,现在才回复,已经调试好了。

兄弟啊,你是怎么调试好的?你的程序是哪里出了问题?
回复

使用道具 举报

20

主题

138

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
346
金钱
346
注册时间
2012-10-11
在线时间
136 小时
 楼主| 发表于 2016-10-17 22:19:16 | 显示全部楼层
我用的5个串口的初始化配置如下:
void USART1_Config(u32 baud)
{
          GPIO_InitTypeDef GPIO_InitStructure;
          USART_InitTypeDef USART_InitStructure;

          RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 , ENABLE);                 //使能串口1时钟

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                          //USART1 TX
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                     //复用推挽输出
          GPIO_Init(GPIOA, &GPIO_InitStructure);                                                     //A端口  

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                                          //USART1 RX
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                            //复用开漏输入
          GPIO_Init(GPIOA, &GPIO_InitStructure);                                                  //A端口

          USART_InitStructure.USART_BaudRate = baud;                                               
          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;                                        //收发模式        

          /* Configure USART1 */
          USART_Init(USART1, &USART_InitStructure);                                                        //配置串口参数函数   
           /* Enable the USART1 */         
        /*USART1 receive data register is not empty */
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

          USART_Cmd(USART1, ENABLE);          
}
void USART2_Config(u32 baud)
{
          GPIO_InitTypeDef GPIO_InitStructure;
          USART_InitTypeDef USART_InitStructure;         
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能UART2所在GPIOA的时钟
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);  //使能串口1时钟          

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                         //USART2 TX
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    //复用推挽输出
          GPIO_Init(GPIOA, &GPIO_InitStructure);                                     //c端口

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                          //USART2 RX
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //复用开漏输入
          GPIO_Init(GPIOA, &GPIO_InitStructure);                                  
  
          USART_InitStructure.USART_BaudRate   = baud;                       
          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;        //收发模式       
  
          /* Configure USART2 */
          USART_Init(USART2, &USART_InitStructure);                                //配置串口参数函数
  
          /*USART2 receive data register is not empty */
          USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);  
          /* Enable the USART2 */
          USART_Cmd(USART2, ENABLE);          
}
void USART3_Config(u32 baud)
{
          GPIO_InitTypeDef GPIO_InitStructure;
          USART_InitTypeDef USART_InitStructure;  
       
       
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);  //使能UART3所在GPIOB的时钟
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);  //使能串口3时钟

//        GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);  //将USART3局部重映射到PC10,PC11  

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                         //USART3 TX
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    //复用推挽输出
          GPIO_Init(GPIOB, &GPIO_InitStructure);                                     //c端口

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;                          //USART3 RX
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //复用开漏输入
          GPIO_Init(GPIOB, &GPIO_InitStructure);                                  //c端口
  
          USART_InitStructure.USART_BaudRate   = baud;                       
          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;        //收发模式       
  
          /* Configure USART3 */
          USART_Init(USART3, &USART_InitStructure);                                //配置串口参数函数
  
          /*USART3 receive data register is not empty */
          USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);  
          /* Enable the USART3 */
          USART_Cmd(USART3, ENABLE);          
}
void USART4_Config(u32 baud)
{
          GPIO_InitTypeDef GPIO_InitStructure;
          USART_InitTypeDef USART_InitStructure;  
       
       
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);  //使能UART4所在GPIOC的时钟
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);  //使能串口4时钟

        //GPIO_PinRemapConfig(GPIO_PartialRemap_UART4, ENABLE);  //将USART3局部重映射到PC10,PC11  

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                         //USART4 TX
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    //复用推挽输出
          GPIO_Init(GPIOC, &GPIO_InitStructure);                                     //c端口

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;                          //USART4 RX
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //复用开漏输入
          GPIO_Init(GPIOC, &GPIO_InitStructure);                                  //c端口
  
          USART_InitStructure.USART_BaudRate   = baud;                       
          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;        //收发模式       
  
          /* Configure USART3 */
          USART_Init(UART4, &USART_InitStructure);                                //配置串口参数函数
  
          /*USART3 receive data register is not empty */
          USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);  
          /* Enable the USART3 */
          USART_Cmd(UART4, ENABLE);          
}void USART5_Config(u32 baud)
{
          GPIO_InitTypeDef GPIO_InitStructure;
          USART_InitTypeDef USART_InitStructure;  
       
       
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);  //使能UART5所在GPIOC的时钟
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);  //使能串口5时钟

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;                         //USART5 TX
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    //复用推挽输出
          GPIO_Init(GPIOC, &GPIO_InitStructure);                                     //c端口

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                          //USART5 RX
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //复用开漏输入
          GPIO_Init(GPIOD, &GPIO_InitStructure);                                  //D端口
  
          USART_InitStructure.USART_BaudRate   = baud;                       
          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;        //收发模式       
  
          /* Configure USART3 */
          USART_Init(UART5, &USART_InitStructure);                                //配置串口参数函数
  
          /*USART3 receive data register is not empty */
          USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);  
          /* Enable the USART3 */
          USART_Cmd(UART5, ENABLE);          
}

可以看看你们的配置有没有问题的?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 23:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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