stm32F103zet6(战舰开发板v1) 移植liteOS touchGFX

刚换了工做,最近接触了一个项目,使用的是stm32低功耗系列,系统是华为的物联网 liteOS操做系统,框架为touchGFX ui框架;html

因为以前接触底层较多所以就想本身移植一个liteos 以及touchgfx到本身的stm32开发板上,恰好本身也有个开发板,开发板是stm32f103zet6这款是大二买的买了就凉着了,是战舰的v1版本;c++

目的:想经过这个过程,让本身更深入的理解项目的架构,底层与上层,以及底层代码的组织结构,操做系统的代码组织结构,底层代码如何和系统交互,底层如何跟框架衔接,如何跟liteos衔接等等;架构

从零开始首先创建裸机的工程,使用st公司的软件,不得不说这个软件太强大了,强大到你用了以后你感受本身成了一个废人(本身作的事情太少),stm32CubeMX直接生成工程,这里很少作介绍,框架

1,stm32 基于hal库的裸机工程,移植liteos;函数

这里发现了华为liteos官网有很详细的介绍,以为彻底不必重写,所以能够直接参考官网;测试

包括裸机工程的创建和liteos的移植;ui

https://support.huaweicloud.com/bestpractice-LiteOS/zh-cn_topic_0145350106.htmlspa

使用stm32CubeMX能够创建基于hal的裸机工程,这里经常使用的简单分为两种,keil和iar ,我这里使用iar工程;操作系统

遇到的问题:3d

1,串口通讯出现乱码;

这个问题浪费了我三四天时间,串口在移植完成以后,操做系统的打印信息会从这个串口输出,因此至关重要,因为个人开发板比较老,当串口出现乱码的时候总觉得晶振配置的有问题,而后看原理图和开发板,发现外部晶振是12m,而stm32CubeMX上外部晶振为8M,再上百度修改库文件 里的晶振;总之试了好几天一直都是乱码,最后发现是吧串口搞错了,根本晶振什么的彻底不用改,就按上面连接里的来设置串口和led都是ok的;必定要搞清楚哪一个串口是你用的(是的,这是比较低级的错误),也就是你设置的串口到底对应物理串口是哪一个,这里我一直觉得是com3,实际上是com4;

 

2 一个须要额外设置的是stjlink调试(这里的额外是相对于华为官网的指导来讲),若是不设置这个,在使用stjlink调试的时候会遇到问题致使不能调试;

3.第二个须要额外设置的用来支持串口的接收数据(中断模式),须要打开串口中断使能;

搭建裸机工程以后,编写了led和串口的中断收发测试程序功能已验证,供你们参考;

led这里的led为PB5,也能够本身加PE5

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5,GPIO_PIN_SET );
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
      HAL_UART_Transmit(&huart1, tData, sizeof(tData), 1000);      
      HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
      HAL_Delay(500);

串口的中断收发例程,库函数太完备,咱们能作的事情太少;

只须要在主函数中打开uart1的接收中断,并重写中断回调函数;

main函数中加入下面一行;

HAL_UART_Receive_IT(&huart1, rData, 1);

重写中断回调函数,这里不是c++中的重载,HAL_UART_RxCpltCallback 这个函数在库中已经存在,只是被定义为弱符号,__weak,咱们在main中重写,编译器连接运行将使用咱们写的函数;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	/* 接收一个字节数据直接发出去 */
	HAL_UART_Transmit(&huart1, rData, 1, 1000);	
	/* 每次须要从新初始化接收结构体指针 */
	HAL_UART_Receive_IT(&huart1, rData, 1);
}

这样两个测试例程都已经正常运行了

这时候裸机工程验证完毕,下一步开始移植liteos操做系统;

相关文章
相关标签/搜索