这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【DIY手势翻页笔】手势翻页笔-过程贴:通过threadx操作系统控制led闪烁

共5条 1/1 1 跳转至

【DIY手势翻页笔】手势翻页笔-过程贴:通过threadx操作系统控制led闪烁及串口输出

菜鸟
2024-07-03 23:42:36     打赏

本人工作中接触过几款stm32的芯片,主要以F0\F1系列为主。

使用过GPIO、UART、IWDG等片上外设。

使用过freertos操作系统,对于threadx还是头一次使用。

借此机会可以初步熟悉一下threadx操作系统。

首先感谢主办方提供此平台,让大家能接触H5系列的芯片。


本贴主要

内容以驱动板载LED(PA5)闪烁及UART打印字符串为实践目标。

初期阶段先使用裸机代码跑通逻辑,后期提高会将功能函数放到threadx线程中去运行。


系统框图

3cf929471ac50e781eec39bcc7cd870.png

硬件原理图

      LED原理图 PA5引脚

8f2211d76e731d75feb98ec2305e585.png

芯片初始化配置使用cubemx工具

代码编译这里使用的是cubemxide,优点是兼容性好环境配置简单。

接下来就开始操作

首先打开cubemx软件

image.png

打开SWD调试接口

image.png

RCC使用外部时钟

image.png

时钟频率24M Hz芯片主频250M Hz

image.png

修改系统时基计时器->TIM6

image.png

打开串口3,开启中断

image.png

PA5引荐设置成输出模式,添加别名“LED”

image.png

工程路径及工程名选择

IDE选择

95cc3087faff5c2694045f94aa4f93e.png

外设文件单独生成

image.pngimage.png

打开工程代码(open project)

image.png

打开main.c文件

添加代码

声明字符串数组

/* USER CODE BEGIN PV */
const  uint8_t Test[] = "Hello EEPW! Hello STM32H503! user:rasngsun\r\n"; //Data to send
/* USER CODE END PV */

添加循环控制函数


/* USER CODE BEGIN WHILE */
while (1)
{
	HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
	HAL_UART_Transmit(&huart3,Test,sizeof(Test),10);// Sending in normal mode
	HAL_Delay(1000);
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

编译并烧录程序

image.png


串口输出信息

image.png

LED亮灭图片

image.pngc7a173d1324f071086ac8b6b4e41f67.png

如果以上操作没问题就可以添加threadx操作系统及创建线程了

这里强调:线程需手动创建,本人使用软件自动创建线程运行代码时发现线程会卡死在延时函数调用之后,此处可能与笔者技术水平有关,还请明眼人赐教。

继续通过cubeMx配置工程

添加Threadx组件

image.png

重新生成代码

打开app_threadx.c文件添加代码

335601cd93acfb33376a1ed2fc8dbc8.png

3f6db90cec37b9b5474e6fecd1b4cdf.png

/* USER CODE BEGIN Includes */
#include "main.h"
#include "usart.h"
/* USER CODE END Includes */


/* USER CODE BEGIN PD */
#define THREAD_STACK_SIZE 1024
/* USER CODE END PD */

/* USER CODE BEGIN PV */
const  uint8_t TestCode[] = "Hello EEPW! Hello STM32H503! Hello Threadx! user:rasngsun\r\n"; //Data to send
uint8_t thread_stack[THREAD_STACK_SIZE];
TX_THREAD thread_ptr;
/* USER CODE END PV */

/* USER CODE BEGIN PFP */
void my_thread_enytry(ULONG initial_input);
/* USER CODE END PFP */

/* USER CODE BEGIN App_ThreadX_Init */
tx_thread_create(&thread_ptr,"my_thread",my_thread_enytry,0x1234,thread_stack,THREAD_STACK_SIZE,15,15,1,TX_AUTO_START);
/* USER CODE END App_ThreadX_Init */

/* USER CODE BEGIN 1 */
void my_thread_enytry(ULONG initial_input)
{
	while(1){
		HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
		HAL_UART_Transmit(&huart3,TestCode,sizeof(TestCode),10);// Sending in normal mode
		tx_thread_sleep(50);
	}
}
/* USER CODE END 1 */

添加完毕即可观察LED闪烁及串口打印信息

8eddc77f5a9c2a4f4308d0a6be7f668.png

一切顺利

这期内容就到这里,大家晚安。




专家
2024-07-04 02:45:52     打赏
2楼

感谢楼主分享


专家
2024-07-04 08:12:57     打赏
3楼

不错,看看


专家
2024-07-04 09:54:59     打赏
4楼

谢谢分享!


高工
2024-07-04 11:16:31     打赏
5楼

谢谢分享!


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]