本人工作中接触过几款stm32的芯片,主要以F0\F1系列为主。
使用过GPIO、UART、IWDG等片上外设。
使用过freertos操作系统,对于threadx还是头一次使用。
借此机会可以初步熟悉一下threadx操作系统。
首先感谢主办方提供此平台,让大家能接触H5系列的芯片。
本贴主要
内容以驱动板载LED(PA5)闪烁及UART打印字符串为实践目标。
初期阶段先使用裸机代码跑通逻辑,后期提高会将功能函数放到threadx线程中去运行。
系统框图
硬件原理图
LED原理图 PA5引脚
芯片初始化配置使用cubemx工具
代码编译这里使用的是cubemxide,优点是兼容性好环境配置简单。
接下来就开始操作
首先打开cubemx软件
打开SWD调试接口
RCC使用外部时钟
时钟频率24M Hz芯片主频250M Hz
修改系统时基计时器->TIM6
打开串口3,开启中断
PA5引荐设置成输出模式,添加别名“LED”
工程路径及工程名选择
IDE选择
外设文件单独生成
打开工程代码(open project)
打开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 */
编译并烧录程序
串口输出信息
LED亮灭图片
如果以上操作没问题就可以添加threadx操作系统及创建线程了
这里强调:线程需手动创建,本人使用软件自动创建线程运行代码时发现线程会卡死在延时函数调用之后,此处可能与笔者技术水平有关,还请明眼人赐教。
继续通过cubeMx配置工程
添加Threadx组件
重新生成代码
打开app_threadx.c文件添加代码
/* 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闪烁及串口打印信息
一切顺利
这期内容就到这里,大家晚安。