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

stm32 USART3 映射方式2

[复制链接]
pentral0311 发布时间:2013-5-23 11:04
  在网上搜了一下,有这方面的提问(
4 ^( H" E* \! X' V1 k" y5 V  I: B# `$ M
在2010-7-5 16:11:34 有提到过 一下为原帖  文字 1 q$ a; U/ o6 t0 S
USART3映射方式2(映射到PD8,PD9)时,要先开启AFIO功能,再初始化相关外设后,USART才有效。6 N2 x* n+ x1 }2 b# g5 ]
4 h' Z+ d# J( Y% ?3 P9 U9 p
     以下代码是正确的:: F: |% Z+ j" o. r1 C( x6 p

# q; U$ e$ a2 Y: i1 E     u32 backRcc = RCC->APB2ENR & (RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO);//read status of rcc_gpiob & rcc_afio
; p: k/ s7 e* @! d0 R( W            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO,ENABLE);% i5 H: Y1 J9 L# f1 P
            0 Y& O0 {* x2 D1 z) G
            GPIO_PinRemapConfig(GPIO_FullRemap_USART3,ENABLE);
( `  K" W' n2 V7 l) T5 o            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
. O+ K& H3 a0 M- r. P  x4 [            /* Configure USART3 Tx (PD.8) as alternate function push-pull */
4 p. H4 i+ a/ W# m: x# {            GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;7 f4 F) n9 E6 y1 M- J3 x
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
' W! s# O) d& y: g            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;: R; d# G, L" i( O. M: k
            GPIO_Init(GPIOD, &GPIO_InitStructure);+ b7 o$ E0 f: z
            
! H7 B: i4 }( r' O            /* Configure USART3 Rx (PD.9) as input Up */  g# d" b+ s% f+ \
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
+ O( b  u" a  j( U. x* M, I            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
, S0 J8 G2 N1 W! d) [) M+ e  q' q            GPIO_Init(GPIOD, &GPIO_InitStructure);
" L/ K; t( A7 l- k" |: l6 {% _            # E  ~( V/ Z- k/ V" B9 i
            if(!backRcc)
, L9 G& k4 o% _* g: i1 z9 t: R4 Y            {
7 Y& X: Q/ h! e                RCC->APB2ENR &= ~backRcc; //restore 
0 x* E) c3 J1 S! a5 q; p* V% k            }7 f& G. U% v8 T

+ X( ?" ~' N; l/ ]' V% [   初始化USART等。。。4 O3 _. a; z2 q# I0 ?
9 @( X* y& K! l
   若去掉  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO,ENABLE);$ T" D8 z: A. ?) e+ X
& L4 B$ V, {3 C. Y& u0 E/ V
   不正常! / |/ W$ r. M0 r! K5 f1 V0 d

' B) u4 s2 x) Q# M0 @)6 R! n: s6 l- M7 L) E2 H: m8 B
( m+ Q  `1 `$ x+ B6 \
根据上述还是没有解决这个问题 (其他口的重映射验证都是OK的),所以又开了一下此贴,希望得到大家的帮助 ,本人代码如下( O& L$ y; r% V$ n/ `
//重映射成功的 方式1* C: Q0 ]. r3 T8 y+ \
#ifdef        DEFINE_UART_MAP_PORT_3    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO , ENABLE);6 z% x& y( `( I
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);7 x! z9 f$ ]4 J6 u2 w& ^9 I6 {
. W% p& D( K6 i& `' v- V
        GPIO_PinRemapConfig(GPIO_PartialRemap_USART3 ,ENABLE);        //        GPIO_FullRemap_USART35 E% j2 H/ q8 N" {* y4 f  [
          /* Configure USART3 Tx (PC10) as alternate function push-pull */
- `& G% [2 U& ^. V, L$ G          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;" F" M# z$ r4 a4 D, M# G& o
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
" d9 p" Y& v2 R/ ~) p( d          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
+ w# N3 Q  R0 ~! ?          GPIO_Init(GPIOC, &GPIO_InitStructure);1 ?' V) R/ u% N  J' E: l

& o. I1 c, K- O" o2 f          /* Configure USART3 Rx (PC11) as input floating */% I) j, z7 Y* R7 s" Y" G- D
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;6 Y! H; B3 j* X. R' m2 m2 F/ q" |
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
. p( z, A& W4 [" b, ?# R4 k5 @! g& P          GPIO_Init(GPIOC, &GPIO_InitStructure);
8 o: |* B( t/ H! R) |  G3 y#endif 
; i: _  n- l, w' ^; g2 V2 r# F
- y; J2 V! E3 }+ r# @; J$ z% D$ v5 z- l& E+ V( p4 ?/ T$ c( g
//方式2 重映射失败
7 B/ P$ e; D3 K) B1 j# ~/ R/ \) q7 Y. T! G# O$ G
#ifdef DEFINE_UART_MAP_3
. B$ x6 N+ K  R+ H6 L. s8 [$ k: D: b
9 q, C1 F" V% K4 S  F# T4 o. j4 p; s
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO,ENABLE);; P! t0 S6 J3 `* y: B/ _4 F1 d

/ i- @* J3 q5 U        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3 , ENABLE);
8 ^0 b! o9 Z4 Q1 v. Y/ {/ L# _) j) @1 @1 G5 F) M+ O4 L. Z

$ y, k- b) K3 _! _/ v4 l( q- }( W    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO , ENABLE);
' _- _/ ]0 I: @$ c8 G0 H' L        GPIO_PinRemapConfig(GPIO_FullRemap_USART3 ,ENABLE);        //        GPIO_FullRemap_USART3$ }" C5 }  E, t  l! c; C2 n# w
1 j5 M* Q( `2 p2 ?. Z
          /* Configure USART3 Tx (PD9) as alternate function push-pull */  r2 @, j  C* ~9 O' K7 Q
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;; \+ m% W8 S! H# P
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;& o2 M4 Q+ R9 q1 u+ |9 w2 q
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;1 O) U2 p) i6 _3 ?6 |, E
          GPIO_Init(GPIOD, &GPIO_InitStructure);
" s! X0 `6 c+ l+ w# B5 m- \1 P
' }  {2 ^4 h: o+ ?          /* Configure USART3 Rx (PD8) as input floating */
- ]7 j! L: O7 C% k8 \          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;$ d4 i# N. Q) f: x9 l. A( e/ c
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
8 t% w( g- |- k          GPIO_Init(GPIOD, &GPIO_InitStructure);( Q9 z2 Z7 P, G+ Q' r! ^/ J

6 ^) l! e( N8 D; k1 V8 D; |#endif
- c4 f$ G# ?' M* Y4 v& j& d
4 B$ J2 p3 K3 D3 I6 A' G附图为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失败了,具体在官网中对这个有做说明
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版