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

【经验分享】STM32串口配置的一般步骤(库函数)

[复制链接]
STMCU小助手 发布时间:2022-2-3 19:00
STM32串口配置的一般步骤(库函数)
7 b( N3 ?9 Z( L7 y8 g(1)串口时钟使能:RCC_APBxPeriphClockCmd();
! k: ]& u" F5 p4 a1 Y* V    GPIO时钟使能:RCC_AHBxPeriphClockCmd();
& z& [1 k2 p7 {3 b& \) d" z* {( y(2)引脚复用映射:GPIO_PinAFConfig();
" X7 m) q. X, a# L$ y! M- W(3)GPIO端口模式配置:GPIO_Init(); 模式配置为GPIO_Mode_AF
, [! }# P" Y* Z0 A(4)串口参数初始化:USART_Init();. ]2 X4 ?  b3 m" m) o. c
(5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)+ p: Y' }! x5 m( `* h0 B
    NVIC_Init();+ L/ p* s# I/ q! t6 O' _
    USART_ITConfig();
3 Y4 J5 w" q- T$ \0 Z(6)使能串口:USART_Cmd();8 l- A* K; i' Z! }3 i" a; C
(7)编写中断处理函数:USARTx_IRQHandler();* G( o9 z' l4 @; e; t$ e$ x4 Q* p5 x
(8)串口数据收发:' e# ?3 N% C+ K3 f: ^2 X
    void USART_SendData();//发送数据到串口,DR+ l, ^2 F3 S! p* i. Y' @
    uint16_t USART_ReceiveData();//接收数据,从DR读取接收的数据! v' |3 Y* E2 y' l% |0 l
(9)串口传输状态获取:- P! B0 g( y0 u/ o
    FlagStatus USART_GetFlagStatus();
$ R6 O  p. o7 ?* F1 X* G    void USART_ClearITPendingBit();
范例代码:
  1. #include "stm32f4xx.h"
    5 T/ z: Y9 r* A6 X
  2. #include "usart.h"4 R. ]8 r, ?2 T! n

  3. , ^* D% \* F+ @; [! ^4 A' Z
  4. /* 中断服务函数 */
    ) e  p. }/ n; `/ I& ^
  5. void USART1_IRQHandler(void)- @+ S. G+ ?4 q0 x
  6. {& r5 ~0 m' ^2 l* E1 s
  7.     uint16_t recv;
    $ L; l$ ~7 {) K5 F' e, b

  8. & X5 u$ l/ k- u6 B' W* Q5 M
  9.     if (USART_GetFlagStatus(USART1,USART_IT_RXNE))+ a; _  S  G& S) N1 M- F  X
  10.     {% G  J0 d+ o6 s4 t( l. g
  11.         recv = USART_ReceiveData(USART1);
    4 K- H: o, D; I9 Q  \
  12.         USART_SendData(USART1,recv);, U, f& n" \, f- n) }3 R
  13.     }
    . |; h, W% f9 q* s- W/ P9 b
  14. }+ U( \& n0 h1 Y9 L9 J

  15. 5 M$ \# O4 L7 A( r. k

  16. 0 d' V. v# a3 r5 |. _% Y( Q* \
  17. void Usart1_Demo_Init(void)
    # o( K1 s5 e6 g+ _9 O
  18. {
    * d+ @7 }; ?+ d5 O( f- u; n
  19.     GPIO_InitTypeDef GPIOA_InitStruct;5 }+ M( T, R" e5 P6 V
  20.     USART_InitTypeDef USART1_InitStruct;
    6 R+ ?2 f+ A% J9 K
  21.     NVIC_InitTypeDef NVIC_InitStruct;
    & M5 {$ A7 c; ^3 L' x5 Q& E9 Z

  22. " X/ S0 k* |4 U
  23.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* 使能USART1时钟 */8 S4 E5 f( J, j  `6 l; K5 E
  24.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  /* 使能GPIOA的时钟 */( |, J5 N2 o6 c9 ~1 Y3 m
  25. . {9 F) ^8 w3 o# A2 B, w( V
  26.     /* 将PA9和PA10映射到串口1 */. [, r. G; _# k( ?" C% s
  27.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
    % @( Y& C' o8 l" |( D  O/ |
  28.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
    2 n) i$ h. i* ?3 p! V8 W) e$ {3 r

  29. 1 Y1 q4 j1 u4 u, }8 G& l( `
  30.     /* 设置GPIO端口模式 */
    3 A  ]5 n% B' B: ^" ^) y
  31.     GPIOA_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
    ) Y& l0 @6 _2 ]$ ?4 T2 p$ }
  32.     GPIOA_InitStruct.GPIO_Mode = GPIO_Mode_AF;+ l" L5 ~. \4 b" N4 q& A
  33.     GPIOA_InitStruct.GPIO_OType = GPIO_OType_PP;# o) }  L+ \, D  [% T
  34.     GPIOA_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
    : R' v8 |$ j3 D! X5 [* e
  35.     GPIOA_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;/ d3 A) M0 D9 {$ ?9 Q8 F
  36.     GPIO_Init(GPIOA, &GPIOA_InitStruct);
    4 W9 D' c( ^$ M1 B4 W
  37. ' s  w9 D$ b0 s0 |4 }2 y
  38.     /* 串口参数初始化 */1 ]' S: @) d5 t, P" I
  39.     USART1_InitStruct.USART_BaudRate = 115200;) h- @% b# ^9 F5 @, Y, ~
  40.     USART1_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;% y; G  e3 [2 `3 P4 Z3 [" ~) ?
  41.     USART1_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;5 {, }: N/ C$ l5 |
  42.     USART1_InitStruct.USART_Parity = USART_Parity_No;# i8 H' Y# O; m4 U; d3 g
  43.     USART1_InitStruct.USART_StopBits = USART_StopBits_1;
    # p) z8 u; n" u; I
  44.     USART1_InitStruct.USART_WordLength = USART_WordLength_8b;
    ; U6 f: U/ {' W6 c8 M
  45.     USART_Init(USART1, &USART1_InitStruct);
    ) {* R2 l4 ?; |! q9 [( y
  46. , O" j8 p$ L% C% g
  47.     /* 使能USART1 */- q/ w2 N, ?* H( X
  48.     USART_Cmd(USART1, ENABLE);, O+ R* O% i' n3 n, A# u5 }

  49. 7 C) q; V& b4 _; X/ O# k
  50.     /* 使能串口使用的中断 */
      r7 g4 [' l, K0 [2 _5 p
  51.     NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;  l4 j* Z7 _' Z3 G8 ^' A* k( j
  52.     NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    0 l. \- d- n  Y
  53.     NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
    3 j- g( C% R1 @9 F& }1 B; `
  54.     NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;( ^$ z$ F$ M2 R7 u7 F" Z
  55.     NVIC_Init(&NVIC_InitStruct);( K, c( Z* I- P' J# N
  56.     USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    " F  T$ h5 k! U+ M* @3 u
  57. }1 e" x9 r% j5 X% e5 w

  58. % _- N# J+ Y/ z5 a& ~& @9 d/ N
  59. int main(void)
    + Q% ?0 c% b. f; {
  60. {
    + B% _! B, m  _0 \4 o
  61.     /* 设置中断分组 */9 r; T) H9 |+ R/ Q& O
  62.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    # J9 b) u, e8 Q- _; o
  63.     Usart1_Demo_Init();& X, Z3 V, H* }6 N/ N

  64. ! q* Q# S! V5 }" G0 j4 ]- f
  65.     while (1);: Y- F( R& M4 r4 a+ M1 v
  66. }
复制代码

2 k( y8 M/ D; f# S
收藏 评论0 发布时间:2022-2-3 19:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版