你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32 USART3 映射方式2

[复制链接]
pentral0311 发布时间:2013-5-23 11:04
  在网上搜了一下,有这方面的提问(

2010-7-5 16:11:34 有提到过 一下为原帖  文字 
USART3映射方式2(映射到PD8,PD9)时,要先开启AFIO功能,再初始化相关外设后,USART才有效。

     以下代码是正确的:

     u32 backRcc = RCC->APB2ENR & (RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO);//read status of rcc_gpiob & rcc_afio
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO,ENABLE);
            
            GPIO_PinRemapConfig(GPIO_FullRemap_USART3,ENABLE);
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
            /* Configure USART3 Tx (PD.8) as alternate function push-pull */
            GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
            GPIO_Init(GPIOD, &GPIO_InitStructure);
            
            /* Configure USART3 Rx (PD.9) as input Up */
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
            GPIO_Init(GPIOD, &GPIO_InitStructure);
            
            if(!backRcc)
            {
                RCC->APB2ENR &= ~backRcc; //restore 
            }

   初始化USART等。。。

   若去掉  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO,ENABLE);

   不正常! 



根据上述还是没有解决这个问题 (其他口的重映射验证都是OK的),所以又开了一下此贴,希望得到大家的帮助 ,本人代码如下
//重映射成功的 方式1
#ifdef        DEFINE_UART_MAP_PORT_3    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO , ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

        GPIO_PinRemapConfig(GPIO_PartialRemap_USART3 ,ENABLE);        //        GPIO_FullRemap_USART3
          /* Configure USART3 Tx (PC10) as alternate function push-pull */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_Init(GPIOC, &GPIO_InitStructure);

          /* Configure USART3 Rx (PC11) as input floating */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
          GPIO_Init(GPIOC, &GPIO_InitStructure);
#endif 


//方式2 重映射失败

#ifdef DEFINE_UART_MAP_3


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO,ENABLE);

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3 , ENABLE);


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO , ENABLE);
        GPIO_PinRemapConfig(GPIO_FullRemap_USART3 ,ENABLE);        //        GPIO_FullRemap_USART3

          /* Configure USART3 Tx (PD9) as alternate function push-pull */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_Init(GPIOD, &GPIO_InitStructure);

          /* Configure USART3 Rx (PD8) as input floating */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
          GPIO_Init(GPIOD, &GPIO_InitStructure);

#endif

附图为keil寄存器值
usart.JPG
收藏 评论4 发布时间:2013-5-23 11:04

举报

4个回答
somethinglqbz 回答时间:2013-5-27 20:50:04

RE:stm32 USART3 映射方式2

学习一下
chunlei233 回答时间:2013-5-28 10:46:42

RE:stm32 USART3 映射方式2

本人菜鸟一个 啥都不懂
ccbbcc 回答时间:2013-5-28 14:18:05

RE:stm32 USART3 映射方式2

赚积分。。。。。。。。。。。。。。
pentral0311 回答时间:2015-1-8 17:55:15
此贴发了将近一年了,主要是当时LCD使用了FSMC这个功能,刚好和这个引脚是冲突的,所以UART失败了,具体在官网中对这个有做说明

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版