STM32CubeMX 实战教程:串口通信实验(LL 库)

1.资源的获取:关注博主并点赞对应博客,并在文章下留言邮箱索取;
2.资源的类型:获取资源仅限于免费公开文章或粉丝免费专享文章,不包括付费文章;

博主分享不易,请给三连哦(关注 + 点赞 + 收藏),你的鼓励是博主分享的动力。

1 前言

1.1 STM32CubeMX

2.1_1.STM32CubeMX_20200803

点击图片进入 ST 官网 STM32CubeMX 介绍页面

1.2 教程介绍

    STM32CubeMX 实战教程 基于正点原子 STM32F1 精英板(STM32F103ZET6)平台,旨在通过对板载资源的使用将各种外设的配置方法讲述清楚。更多教程请订阅 [专栏]STM32CubeMX
    本教程是 STM32CubeMX 实战教程中的第三篇,主要通过串口通信实验,将 STM32CubeMX USART 的配置方法讲述清楚。

1.3 准备工作

    系统版本:Windows 10 专业版 64 位
    软件版本:STM32CubeMX V6.0.0 ( STM32CubeMX 下载及安装教程
    硬件平台:正点原子 STM32F1 精英板
    编译环境:MDK_ARM V5.29 ( MDK_ARM 下载及安装教程
    调试工具:ST-LINK/V2
    串口助手:ATK-XCOM V2.6

1.4 硬件资源

    本节教程使用的硬件资源分配:

序号引脚引脚功能硬件连接备注
01PA9USART1_TXCH340G(USART1 跳线帽需短接)USB 线接 USB_232 端口
02PA10USART1_RXCH340G(USART1 跳线帽需短接)USB 线接 USB_232 端口

2 配置项目

2.1 项目导入

    将上一节的 SysTick_Test 的项目另存作为 USART_Test 的项目初始模板。
    工程模板修改及项目导入,请参考:STM32CubeMX 实战教程:LED 灯、蜂鸣器、按键输入实验。这里就不重复了,项目目录如下:
2.1_1

2.2 USART & NVIC 配置

  1. PA9PA10 配置成 USART1_TXUSART1_RX;(由于没有配置 USART1,引脚会显示黄色警告)
    2.2_1
  2. 点击 USART1,设置模式为 Asynchronous无硬件流控制,参数为:1152008 BitsNone1;(配置完 USART1 后,相关引脚会显示绿色,提示引脚配置正常)
    2.2_2
    其他模式可参考:附录2 USART1 配置窗口介绍
  3. 点击 NVIC,使能 USART1 中断,优先级设置为 2,0;
    2.2_3
  4. 勾选 Generate IRQ handler 生成中断服务函数,不勾选 Call HAL handler;(由于默认不开启中断源,勾选了也没有作用)
    2.2_4

2.3 Clock 配置

    Clock 不需要配置,可直接继续使用。可参考:STM32CubeMX 实战教程:新建项目和生成 MDK_ARM 工程STM32CubeMX 实战教程:SysTick 实验
2.3_1

2.4 生成代码

    项目管理配置及生成代码请参考:STM32CubeMX 实战教程:新建项目和生成 MDK_ARM 工程STM32CubeMX 项目配置窗口介绍(一)STM32CubeMX 项目配置窗口介绍(二)
    点击 GENERATE CODE 生成代码。
2.4_1

3 代码测试

  1. 打开 MDK_ARM 工程;
    3_1
  2. main.c 文件 main 函数中,有 MX_USART1_UART_Init() 的回调函数,查看其函数源码;
    3_2
        值得注意的是:生成代码中开启中断,但默认不使能中断源。所以我们需要在初始化代码后配置使能一下 USART1 的中断源。
  3. 配置 USART1 Interrupt Source,在 MX_USART1_UART_Init() 函数后的用户代码区域加入配置代码;(使能 RXNE 和 IDLE 中断)
    3_3
  4. usart.c 文件用户代码区域加入中断回调函数及中断处理代码;(请自行在 usart.h 文件中声明相关变量和函数)
    3_4
    USART1_IRQ 回调函数代码如下:(代码解析请参考:STM32 串口接收不定长字节数据
/* USER CODE BEGIN 0 */
uint8_t USART1_RX_BUF[256];
uint8_t USART1_RX_CNT = 1;
uint8_t USART1_TX_STA = 0;

void USART1_IRQ(void)
{
  uint8_t res;
  uint8_t clear = clear;

  if(LL_USART_IsActiveFlag_RXNE(USART1) != 0)
  {
    res = USART1->DR;
    USART1_RX_BUF[USART1_RX_CNT++] = res;
  }
  else if(LL_USART_IsActiveFlag_IDLE(USART1) != 0)
  {
    clear = USART1->SR;
    clear = USART1->DR;
    USART1_RX_BUF[0] = USART1_RX_CNT - 1;
    USART1_RX_CNT = 1;
    USART1_TX_STA = 1;
  }
}
/* USER CODE END 0 */
  1. stm32f1xx_it.c 文件 USART1_IRQHandler() 函数的用户代码区域调用中断处理函数 USART1_IRQ()
    3_5
  2. while 循环中加入测试代码;
    3_6

main 函数代码如下:

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_AFIO);
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);

  NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);

  /* System interrupt init*/

  /** NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST
  */
  LL_GPIO_AF_Remap_SWJ_NONJTRST();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
	SysTick->CTRL  = SysTick_CTRL_ENABLE_Msk |  // SysTick Timer clock source = HCLK_DIV8 (HCLK/8 = 9MHz)
                   SysTick_CTRL_TICKINT_Msk;  // SysTick Timer ENABLE | SysTick Timer Interrupt ENABLE
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  LL_RCC_GetSystemClocksFreq(&get_rcc_clock);
	
  LL_USART_EnableIT_RXNE(USART1);  // ENABLE USART1 RXNE Interrupt
  LL_USART_EnableIT_IDLE(USART1);  // ENABLE USART1 IDLE Interrupt
	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    if(USART1_TX_STA == 1)
    {
      uint8_t i;
			
      for(i=1;i<USART1_RX_BUF[0] + 1;i++)
      {
        while(LL_USART_IsActiveFlag_TC(USART1) == RESET);
        LL_USART_TransmitData8(USART1,USART1_RX_BUF[i]);
      }
		
      while(LL_USART_IsActiveFlag_TC(USART1) == RESET);
      USART1_TX_STA = 0;
    }
  
 /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
  1. 编译工程;
    3_7
  2. 使用 ST-LINK/V2 下载程序,按下复位按键,若按照下面操作看到正常现象,则说明程序正常运行,USART1 配置成功。
Steps操作正常现象备注
1使用 X-COM 串口助手默认配置发送任意字符串(中英文皆可)串口助手会接收到相同的字符串-

    可参看下图:
3_8

4 结束

    本教程由 Brendon Tan 原创发布,版权所有。该文档仅供个人学习交流使用,不得用于其他用途, 禁止商用, 转载或公开使用请联系作者授权。
    此教程由本人独立整理,如有不当之处,欢迎指正。

附录

附录1 相关教程

    STM32Cube 系列软件教程总目录请参考文章:STM32Cube 生态系统之网站、视频、文档及教程汇总
    该文章还提供:

  • STM32Cube 生态系统相关文章
  • STM32Cube 生态系统相关软件更新介绍
  • STM32Cube 生态系统相关教程汇总
  • STM32Cube 生态系统相关网站汇总
  • 该文章会不定期修改更新,更多信息请进入文章查看

附录2 USART1 配置窗口介绍

0_1

Mode描述硬件引脚支持外设备注
Asynchronous异步模式TXD、RXDUSART、UART我们常用的串口
Synchronous同步模式TXD、RXD、CKUSART-
Single Wire (Half-Duplex)半双工单线模式TXDUSART、UART-
Multiprocessor Communication多处理器通讯模式TXD、RXDUSART、UART-
IrDA红外解码通信TXD、RXDUSART、UART-
LIN总线通信TXD、RXDUSART、UART-
SmartCard智能卡模式TXDUSART-
SmartCard with Card Clock带时钟智能卡模式TXD、CKUSART-

0_2

硬件流控制(RS232)描述硬件引脚支持外设备注
CTS OnlyClear To Send,发送清除CTSUSART-
RTS OnlyRequire To Send,发送请求RTSUSART-
CTS/RTS发送清除/发送请求CTS、RTSUSART-

以下为Mode的相应模式配置界面:

  • Mode
    • Asynchronous - 异步模式
      0_3
      该模式下,仅需 TXDRXD 两个引脚即可通信,即我们常用的串口。

    • Synchronous - 同步模式
      0_4

    • Single Wire (Half-Duplex) - 半双工单线模式
      0_5

    • Multiprocessor Communication - 多处理器通讯模式
      0_6

    • IrDA - 红外解码通信
      0_7

    • LIN - 总线通信
      0_8

    • SmartCard - 智能卡模式
      0_9

    • SmartCard with Card Clock - 带时钟智能卡模式
      0_10

  • 21
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Python是一种广泛应用于网络爬虫的高级编程语言,可以用于开发众多类型的爬虫,包括招聘数据爬虫。招聘数据爬虫可视化系统能够以图表等可视化方式展示招聘数据,并依据数据的特征进行数据分析和挖掘,有助于招聘决策者进行数据驱动的招聘决策。 本系统的设计与实现可分为以下几个步骤: 第一步是爬取招聘数据,可以使用Python的requests和BeautifulSoup来实现网站爬取和数据解析。在爬取时需要注意反爬虫机制,并对爬取到的数据进行去重和清洗处理。 第二步是数据存储,需要选择合适的数据作为数据存储介质。常用的有MySQL、MongoDB、Redis等,在其基础上使用Python的ORM框架,如SQLAlchemy等,来实现数据的CRUD操作。 第三步是数据分析与挖掘,需要基于数据量较大的情况下,使用数据可视化工具,如Matplotlib、Seaborn、Pyecharts等,来绘制各种图表,如饼图、折线图、柱状图等。同时,还需要进行数据挖掘,如使用分类器、聚类算法等进行数据分析,以了解数据背后的规律和特征。 第四步是前端展示,需要使用Python的web框架,如Django、Flask等,来实现前端与后台的交互。在前端展示时,可以使用前端UI框架,如Bootstrap、Ant Design等,来美化前端页面,同时为用户提供便捷的操作和查看招聘数据的功能。 总之,基于Python的招聘数据爬虫可视化系统的设计与实现是一项较为复杂的工作,需要多方面的技术支持,对于招聘决策者来说,这可以有效提高决策效率,减少招聘成本。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值