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

【经验分享】STM32G031K6 LL库的使用 - UART

[复制链接]
STMCU小助手 发布时间:2021-11-11 23:00
说明:驱动基于STm32G031K6测试,其他型号需自行做改动。9 ]/ W7 l0 D/ e6 d' s6 r; U5 K) F& t

5 I  i1 n8 w; P串口1的初始化:" f4 W& r4 f2 T

$ l  Z! R8 i2 E
  1. //使用串口1,通过中断和DMA进行数据收发。DMA的初始化另作说明
    9 T# n, p" x) R  \  ^3 m5 G# X6 x
  2. void STM32LLUart1Init(void)) I0 A2 y/ G& c/ m5 p
  3. {
    8 L; a6 [# I* ]
  4.         LL_USART_InitTypeDef UART_InitStruct = {0};& R. r( l' A# m* Z$ o* O( Z8 I
  5.         LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
    - u; t; B  D4 R" T1 S* Q4 B

  6. % w' K, H( f: E+ V5 s( i
  7.         LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);            //使能GPIO时钟3 L( u, j5 i& R) Z7 r- T
  8.         LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);         //使能串口1时钟
    8 r8 @" L& @7 \; s. j2 _+ F
  9. 5 G+ I: }% {* Y9 @5 S
  10.         GPIO_InitStruct.Pin = bspUART1_TX_PIN;                        //TXPin指定/ D) N# i8 ^3 Z  M
  11.         GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;                //io模式配置为复用模式* [6 o/ s' w/ ^6 ]3 X; D; h( e, q+ N6 ^
  12.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;              //设置为高速率
    3 K- `, P: F$ R# o7 U% \2 p
  13.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;         //设置为推挽输出
    6 P9 h# ~6 l; R7 R0 Y& C! J
  14.         GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;                       //不带上拉6 q7 c* V3 B- z# a* j) U1 G6 Q1 T
  15.         GPIO_InitStruct.Alternate = LL_GPIO_AF_1;                     //选择复用IO功能# g9 q6 S% B2 h2 `
  16.         LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    , w7 ]7 i# V- K

  17. 6 x- K" Z" a6 j2 @2 z2 m- m2 c
  18.         GPIO_InitStruct.Pin = bspUART1_RX_PIN;                        //TXPin指定
    & c' o8 [( ?% u7 a' ?* z! J
  19.         GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
    8 V+ ^6 Q8 y1 H! A2 Q" h
  20.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    4 _3 R7 y2 S/ b  o+ g3 |- c) D
  21.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;6 T; j' ^6 A3 I$ ^8 D. b1 A% u: B
  22.         GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    ( B* }7 M2 s' ]4 d/ ^
  23.         GPIO_InitStruct.Alternate = LL_GPIO_AF_1;                     //选择复用IO功能
    0 `9 A, A5 B3 L% H8 I4 q# {& \0 I
  24.         LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    1 U8 P# S5 p! i

  25. & n, z7 m3 h6 N3 C. D
  26.         NVIC_SetPriority(USART1_IRQn, 0);                             //开启串口中断
    5 f  Y- v& a$ s! ~; L
  27.         NVIC_EnableIRQ(USART1_IRQn);- D/ v# e* v7 B& a8 @
  28. 1 K8 v( |3 ^) M5 x8 w6 c/ h5 \
  29.         UART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;     //设置时钟预分频
    2 o% Q8 k0 C( i
  30.         UART_InitStruct.BaudRate = 115200;                            //设置串口通信波特率
    $ B' k! k# @7 h) L) h( v+ b+ {+ X
  31.         UART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;            //8位数据位& A  H/ L% i$ u5 V
  32.         UART_InitStruct.StopBits = LL_USART_STOPBITS_1;               //1位停止位( C9 A; r9 a* `1 N% E6 n: E& @
  33.         UART_InitStruct.Parity = LL_USART_PARITY_NONE;                //奇偶校验关闭) a/ E( T: P) b1 E9 K
  34.         UART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; //数据收发功能都开
    5 Q, C3 ?% g% b' X$ C
  35.         UART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;//硬件流控关闭* x2 p# A3 Y6 v+ X4 Q
  36.         UART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;      //数据采样频率倍数设置
    ; H8 S6 ?: [* X8 ]# l; r- [
  37.         LL_USART_Init(USART1, &UART_InitStruct);
    " P: h. |6 r, m
  38. : ]" H$ O% j1 \- _, V9 l% x
  39.         LL_USART_SetTXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);//设置TX缓存阈值为深度的1/8,暂时不理解这个,可能是串口中断产生时的fifo阈值吧: |5 l* d2 e5 d3 X7 {' H+ ?
  40.         LL_USART_SetRXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);//设置RX缓存阈值为深度的1/88 P4 P" u! P' h
  41.         LL_USART_DisableFIFO(USART1);                                   //因为使用dma接收,关闭FIFO9 |& Y  I: u3 X' V
  42.         LL_USART_ConfigAsyncMode(USART1);                               //其他基本配置
    - ]; F# l- L) U

  43. - j5 }4 G# @4 q" @7 f: O* L
  44.         LL_USART_Enable(USART1);                                        //使能串口( |* m6 A: |& H
  45. 7 T2 l" B/ B8 I5 v
  46.         while((!(LL_USART_IsActiveFlag_TEACK(USART1))) || (!(LL_USART_IsActiveFlag_REACK(USART1))));                            //检查相关标志位
    ' S5 Q0 }$ d; a2 `7 K

  47. 7 p  ~' t! Q2 K  B/ P9 i& H0 f
  48.         LL_USART_EnableIT_IDLE(USART1);                                 //使能空闲中断
    0 B& v1 B) D; G" c
  49.         LL_USART_EnableIT_ERROR(USART1);                                //使能错误中断
    ' z  ~% \8 W2 t+ K
  50. 9 O) B% v6 j( a; S
  51. }
复制代码
/ W! }1 p) G( @' j6 n: y
串口中断处理函数:0 x0 b( E1 ]8 F: A( Y, X

6 k8 H$ I3 l4 ~: g1 \. @4 N
  1. void USART1_IRQHandler(void)
    + L) o. ^; `. F/ _+ F; }
  2. {
    / {2 ]# g- ~! F; T9 m" x
  3.     uint32_t isr_reg = 0;        $ |2 k7 D3 a: g, S# B
  4.     isr_reg = LL_USART_ReadReg(USART1, ISR);        
    7 [7 f/ v9 U0 V. j8 B
  5.     if (LL_USART_IsActiveFlag_IDLE(USART1))
    ! ^( N1 b3 P- ~  ?6 I" D
  6.     {
    * y# Y: Q$ x8 l6 W0 F2 H4 v* T
  7.         LL_USART_ClearFlag_IDLE(USART1);( Y8 ?% l/ ^0 ~7 E5 A+ A
  8.         //设置串口接收使用DMA,串口接收的数据会自动保存到DMA初始化时配置的缓存内,
    5 R1 U6 u, L3 w5 H6 h. o+ {1 N/ _" D
  9.         //这里可能需要对收取到缓存的数据做一些操作。0 a2 t; Z( \6 S! I
  10.     }  u9 k% e8 d, j) i# X
  11.     LL_USART_WriteReg(USART1,ICR,isr_reg)7 f- y2 L$ Q. A. e
  12. }
复制代码

0 j1 U3 Y1 V* g/ ~串口发送函数:. y2 k( Y' ~# E9 \0 u* }. O
& E* s) {/ E9 M- R" {  X% L
  1. void STM32LLUart1SendBuffer(uint8_t *buffer,uint16_t length)% ?6 @' K  H( G) u: {! B: u
  2. {% \. x0 N& t% g. U4 q2 q" A5 ?5 t* p( T
  3.     uint16_t i = 0;* x2 ?, Q: c5 u! ?; G7 v
  4.     for(i=0;i<length;i++)1 }$ a5 n8 B, g' J; w& O/ K
  5.     {6 {) p& a' q2 Y0 Z  n* C. [
  6.         while(!LL_USART_IsActiveFlag_TXE(USART1));4 P$ J' T0 J: S  i1 M' H
  7.         LL_USART_TransmitData8(USART1,buffer<i>);
    + S6 ^* S, e9 e; X( Y
  8.     </i>}, k7 W$ |" \  S
  9. }
复制代码

: f. N) I8 i2 G/ r7 N' t9 Y串口数据接收通过DMA进行,不需要串口接收函数,DMA具体配置另作说明。9 v# T2 Y6 X7 s6 Y' J+ H( J
; k! G% H/ N& |. H1 a* B
1 r4 g/ v" E9 r8 R/ A5 y& S: u8 E
收藏 评论0 发布时间:2021-11-11 23:00

举报

0个回答

所属标签

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