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

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

[复制链接]
STMCU小助手 发布时间:2021-11-11 23:00
说明:驱动基于STm32G031K6测试,其他型号需自行做改动。

串口1的初始化:

  1. //使用串口1,通过中断和DMA进行数据收发。DMA的初始化另作说明
  2. void STM32LLUart1Init(void)
  3. {
  4.         LL_USART_InitTypeDef UART_InitStruct = {0};
  5.         LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

  6.         LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);            //使能GPIO时钟
  7.         LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);         //使能串口1时钟

  8.         GPIO_InitStruct.Pin = bspUART1_TX_PIN;                        //TXPin指定
  9.         GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;                //io模式配置为复用模式
  10.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;              //设置为高速率
  11.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;         //设置为推挽输出
  12.         GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;                       //不带上拉
  13.         GPIO_InitStruct.Alternate = LL_GPIO_AF_1;                     //选择复用IO功能
  14.         LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  15.         GPIO_InitStruct.Pin = bspUART1_RX_PIN;                        //TXPin指定
  16.         GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  17.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  18.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  19.         GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  20.         GPIO_InitStruct.Alternate = LL_GPIO_AF_1;                     //选择复用IO功能
  21.         LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  22.         NVIC_SetPriority(USART1_IRQn, 0);                             //开启串口中断
  23.         NVIC_EnableIRQ(USART1_IRQn);

  24.         UART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;     //设置时钟预分频
  25.         UART_InitStruct.BaudRate = 115200;                            //设置串口通信波特率
  26.         UART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;            //8位数据位
  27.         UART_InitStruct.StopBits = LL_USART_STOPBITS_1;               //1位停止位
  28.         UART_InitStruct.Parity = LL_USART_PARITY_NONE;                //奇偶校验关闭
  29.         UART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; //数据收发功能都开
  30.         UART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;//硬件流控关闭
  31.         UART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;      //数据采样频率倍数设置
  32.         LL_USART_Init(USART1, &UART_InitStruct);

  33.         LL_USART_SetTXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);//设置TX缓存阈值为深度的1/8,暂时不理解这个,可能是串口中断产生时的fifo阈值吧
  34.         LL_USART_SetRXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);//设置RX缓存阈值为深度的1/8
  35.         LL_USART_DisableFIFO(USART1);                                   //因为使用dma接收,关闭FIFO
  36.         LL_USART_ConfigAsyncMode(USART1);                               //其他基本配置

  37.         LL_USART_Enable(USART1);                                        //使能串口

  38.         while((!(LL_USART_IsActiveFlag_TEACK(USART1))) || (!(LL_USART_IsActiveFlag_REACK(USART1))));                            //检查相关标志位

  39.         LL_USART_EnableIT_IDLE(USART1);                                 //使能空闲中断
  40.         LL_USART_EnableIT_ERROR(USART1);                                //使能错误中断

  41. }
复制代码

串口中断处理函数:

  1. void USART1_IRQHandler(void)
  2. {
  3.     uint32_t isr_reg = 0;        
  4.     isr_reg = LL_USART_ReadReg(USART1, ISR);        
  5.     if (LL_USART_IsActiveFlag_IDLE(USART1))
  6.     {
  7.         LL_USART_ClearFlag_IDLE(USART1);
  8.         //设置串口接收使用DMA,串口接收的数据会自动保存到DMA初始化时配置的缓存内,
  9.         //这里可能需要对收取到缓存的数据做一些操作。
  10.     }
  11.     LL_USART_WriteReg(USART1,ICR,isr_reg)
  12. }
复制代码

串口发送函数:

  1. void STM32LLUart1SendBuffer(uint8_t *buffer,uint16_t length)
  2. {
  3.     uint16_t i = 0;
  4.     for(i=0;i<length;i++)
  5.     {
  6.         while(!LL_USART_IsActiveFlag_TXE(USART1));
  7.         LL_USART_TransmitData8(USART1,buffer<i>);
  8.     </i>}
  9. }
复制代码

串口数据接收通过DMA进行,不需要串口接收函数,DMA具体配置另作说明。


收藏 评论0 发布时间:2021-11-11 23:00

举报

0个回答

所属标签

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