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

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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版