基于STM32Cube并用中段实现LED亮灭及串口通信

文章内容:

用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。并用中段完成一个STM32的USART串口通讯程序

目录

1.中段

1.1含义

1.2中段过程

 1.3作用

2.使用中断方式点亮LED

2.1CubeMX生成工程

2.2GPIO

 3.烧录程序

 3.1添加代码

 3.2烧录程序

 3.3效果展示

4.串口通信

4.1建立工程

4.2代码

 五总结

六参考资料


1.中段

1.1含义

CPU 暂时停下现行程序的执行,转向为临时发生的事件进行处理,处理完后,再返回执行原程序。中断是一种在发生了一个外部的事件时调用相应的处理程序(或称服务程序)的过程。中断服务程序与中断时CPU正在运行的程序是相互独立的,相互不传递数据。

1.2中段过程

 1.3作用

1、抢占式优先级

2、响应式优先级

 抢占式优先级的特点是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。

2.使用中断方式点亮LED

2.1CubeMX生成工程

创建新工程
选择 STM32F103C8 芯片,点击 Start Project 进入工程即可
配置系统调试接口 SYS,选择 Serial Wire
配置外设 RCC ,选择 HSE (外部高速时钟)为 Crystal/Ceramic Resonator


2.2GPIO

选择 LED 灯引脚 PA5,设置引脚为输出模式 GPIO_Output
选择作为外部中断的引脚 PB1,设置为与中断线 GPIO_EXTI15 连接

将 GPIO_PA5 命名为 R

将 GPIO_PB1 命名为 ZDUAN,触发方式选择下降沿触发 ,选择上拉电阻

 选择NVIC

 设置中断优先级

 设置时钟

 最后生成keil5工程

 3.烧录程序

 3.1添加代码

代码如下

/*
* @brief EXTI line detection callbacks. 
* @param GPIO_Pin: Specifies the pins connected EXTI line,
* @retval None 
*/ 
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 
{ 
	if( GPIO_Pin == ZDUAN_Pin ) 
		{
			HAL_GPIO_TogglePin(R_GPIO_Port, R_Pin); 
		}
}

 

 3.2烧录程序

 3.3效果展示

注:由于没有开关,只好通过线接地与不接地来代替开关进行中段操作

4.串口通信

4.1建立工程

先新建工程,步骤同上

设置RCC

设置SYS

 选择UASRT1,将mode改为异步通信,选择下面的NVIC Setting

 创建工程同上

4.2代码

首先自己定义一个数组的长度用来放置所传输的数据

uint8_t OT_RxBuffer;		
uint8_t Uart1_RxBuff[1000];	
uint8_t Uart1_Rx_Cnt = 0;	

编写接受函数

HAL_UART_Receive_IT(&huart1, (uint8_t *)&OT_RxBuffer, 1);

使能函数以及发送函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_UART_TxCpltCallback could be implemented in the user file
   */
		Uart1_RxBuff[Uart1_Rx_Cnt++] = OT_RxBuffer;   //??????
	
		if((Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0x0A)&&(Uart1_RxBuff[Uart1_Rx_Cnt-2] == 0x0D)) 
		{
			HAL_UART_Transmit(&huart1, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt,0xFFFF); 
			Uart1_Rx_Cnt = 0;
			//memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); 
		}
	
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&OT_RxBuffer, 1);   
}

编译程序

 4.3烧录程序

最终结果如下

 五总结

通过本次实验,我用CUbeMX实现了灯的亮灭和用中段的方式实现串口通信,了解了中段的一些相关知识

六参考资料

初学STM32:基于CubeMX利用中断实现LED及串口通信_Lc-Yusheng的博客-CSDN博客

HAL 库 STM32CubeMX 实现 LED 亮灭----中断模式_L-GRAZY的博客-CSDN博客

STM32新手必看 简单几步用cubeMX完成按键的外部中断控制灯的亮灭(STM32F103RCT)_ZCHHHHHHH12的博客-CSDN博客_stm32外部中断控制led灯亮灭

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用STM32CubeMX进行串口控制GPIO的配置时,首先需要打开STM32CubeMX并选择对应的芯片型号,比如stm32f103c8t6。然后可以进行时钟配置,根据需求选择配置。接下来,点击引脚标号,进行对应的GPIO配置。具体配置方法可以参考GitHub上的教程。需要注意的是,不同的芯片对引脚的处理可能会有所不同,所以在进行配置时需要注意芯片的特性。在配置完成后,可以生成代码并使用Keil等开发工具进行编程。通过编程,可以实现串口控制GPIO的功能,如控制LED灯、数码管等外部硬件设备。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [GPIO工作模式及CUBEMX的配置](https://blog.csdn.net/m0_62916400/article/details/124505157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [STM32 Cubemx实现串口通信、I2C与GPIO的综合应用](https://blog.csdn.net/Nirvana_6174/article/details/104320694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值