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

stm32 USART3 映射方式2

[复制链接]
pentral0311 发布时间:2013-5-23 11:04
  在网上搜了一下,有这方面的提问(* C: _' s% k3 k- ]' e/ ]% V) b# y; Y
( v8 a& M$ o  }% ]1 ~# j
2010-7-5 16:11:34 有提到过 一下为原帖  文字 
, b3 I4 Z/ A2 W9 Q9 O: }USART3映射方式2(映射到PD8,PD9)时,要先开启AFIO功能,再初始化相关外设后,USART才有效。* U) j# d; {: \. O

. ~: P* A# W- p  j6 U; E& Z     以下代码是正确的:
7 w9 C$ ^: y8 @+ [" C, @
6 w" p1 b# Q  ]: E9 X) M8 ?8 c7 \     u32 backRcc = RCC->APB2ENR & (RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO);//read status of rcc_gpiob & rcc_afio+ k# ?3 {+ W# Z+ t# R
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO,ENABLE);& m# a( J: L4 ?1 e
            
, j* c/ `3 s+ V! p* h6 ~            GPIO_PinRemapConfig(GPIO_FullRemap_USART3,ENABLE);9 L* u, V. i& g  p2 q
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
4 \8 F# w1 T4 n, n- x  x            /* Configure USART3 Tx (PD.8) as alternate function push-pull */
9 V/ M+ _1 k% z1 F$ p) B% p            GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;5 a2 J. O: ], f/ h- J9 L9 T
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
# \( V) o8 ?( k2 `$ B            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;$ _/ ^( y8 Y: W: k* }& x
            GPIO_Init(GPIOD, &GPIO_InitStructure);( R! i* C/ v' E* a: h9 z; t! R* s8 n
            & e2 o2 V. t- [! w
            /* Configure USART3 Rx (PD.9) as input Up */
$ F' C" a6 U7 K3 a$ G1 p2 ^$ i% J            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
* }3 q+ ~' C1 C  w9 y0 `, @& ~            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
7 z- V9 B1 }. I6 D8 y7 m  e$ F; c; @            GPIO_Init(GPIOD, &GPIO_InitStructure);6 [/ X; j8 F8 j9 ^! m1 \$ W9 e7 ?
            
+ \, N3 o6 M: U; x* ?6 h" E            if(!backRcc)
/ o/ i# d0 P) H1 q: F. c1 z            {
2 S# o5 d. r$ ]5 W9 H7 w0 _                RCC->APB2ENR &= ~backRcc; //restore # e3 K! ]+ ?6 u  M9 d
            }
; f0 A0 y6 @8 c/ t9 P' D& k. Q# V' ^/ j  k$ x
   初始化USART等。。。# \( P5 E. O+ W% w2 ~# c

) {) Q) z, }" C0 I   若去掉  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO,ENABLE);
' b  V$ c# A+ ~* E6 t; O; D3 o2 L
4 E# {) h$ ~* s! b+ T6 U) k   不正常! ) L6 J$ b! Y. _$ L9 I
: ~6 C, T4 _4 R5 s" T- l. H
9 H$ ?) j" O/ I8 W& A" `

& u9 P! A) {% O根据上述还是没有解决这个问题 (其他口的重映射验证都是OK的),所以又开了一下此贴,希望得到大家的帮助 ,本人代码如下
# a* p3 u; L( b3 _6 B//重映射成功的 方式1' C9 K" G+ g7 i3 f/ @
#ifdef        DEFINE_UART_MAP_PORT_3    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO , ENABLE);7 |# w* X" h+ N( b0 p
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
& `0 K; |! i! a$ q& o0 }
: M- [/ m, F3 u# ^        GPIO_PinRemapConfig(GPIO_PartialRemap_USART3 ,ENABLE);        //        GPIO_FullRemap_USART3
' P! N" s5 q  D- Y- d          /* Configure USART3 Tx (PC10) as alternate function push-pull */; ~! U& G8 a5 g8 Q- m
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;& o& H5 _) r# B8 A/ r
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;* P( {+ O* ~8 C% e5 X' w
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;% Z2 X, l* Y. R
          GPIO_Init(GPIOC, &GPIO_InitStructure);
( }- J" d# O; D  P8 z  {6 @0 |8 h# s2 H! E
          /* Configure USART3 Rx (PC11) as input floating */# D) P+ ~! ?- b) ^
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
* u/ }# U: F( |2 r          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;- G0 q2 }: _, K# d, G! X9 V8 }  l
          GPIO_Init(GPIOC, &GPIO_InitStructure);0 `8 W0 C9 V% v- N, Y4 q
#endif , o# B( B. x9 X) k# G

4 N! T6 v* O2 p9 E) D, ]+ J
& J6 D7 W" t! F4 Z$ v# `# v//方式2 重映射失败, t% c% t! F6 K. }2 F! F

0 N, ?8 P0 C! h: x3 H9 K#ifdef DEFINE_UART_MAP_3
' X. J% t# c( `2 ~# J8 A/ Z; W3 f4 a0 k+ L- K

6 ?) c6 e! F; B2 q" u) a! i        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO,ENABLE);
: Z0 V" P' J3 b( z1 {1 B, w# {* ?6 B
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3 , ENABLE);
  |6 c7 `  I6 N8 f( [* Q2 e& a" F5 W0 P
  {- m: m- a7 Z' g
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO , ENABLE);* B9 g; a6 T$ ]4 D% L7 O, Z& [
        GPIO_PinRemapConfig(GPIO_FullRemap_USART3 ,ENABLE);        //        GPIO_FullRemap_USART3
' k) ^8 o' k" T' z0 E4 [
. ~' x- a3 g4 ^/ z2 y          /* Configure USART3 Tx (PD9) as alternate function push-pull */
6 |- G) v% d5 [2 l2 W+ a          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;3 V5 a/ a2 U. G" w6 P
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
' g3 Z& W; x6 a4 N          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
) A# Q; i6 H4 V          GPIO_Init(GPIOD, &GPIO_InitStructure);& H, {4 q- Q3 k% }( `
  F0 H; s4 Y+ `( q) [
          /* Configure USART3 Rx (PD8) as input floating *// @- b$ [; X/ i5 M) W5 M$ V+ K
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
4 m$ D. q! |9 h, S          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
* V  z9 N, B6 C          GPIO_Init(GPIOD, &GPIO_InitStructure);
" u: x- s+ u1 O: a$ n# i9 r
8 F" K/ _2 t* E; ~1 B#endif
/ o' i: m7 V$ i5 I) {
* o9 B9 c, Z; o附图为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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版