当前位置: 首页 > news >正文

stm32f103 标准库移植rt-thread nano

参考资料:RT-Thread 文档中心

环境:1、stm32f103开发板    2、keil     3、rt-thread nano pack

步骤:

1、添加rt-thread nano到keil工程,步骤参见 基于 Keil MDK 移植 RT-Thread Nano

2、stm32f10x_it.c文件下删除异常处理函数 HardFault_Handler() 和悬挂处理函数 PendSV_Handler(),这两个函数已由 RT-Thread 实现,所以需要删除工程里中断服务例程文件中的这两个函数,避免在编译时产生重复定义。

3、SysTick_Handler() 中断服务例程由用户在 board.c 中重新实现,stm32f10x_it.c文件下删除 SysTick_Handler() ,避免在编译时产生重复定义。

4、board.c文件下配置rt_hw_board_init函数,屏蔽掉 #error "TODO 1: OS Tick Configuration.",重新定义函数SysTick_Handler,添加系统时钟配置 SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);

void SysTick_Handler()
{rt_interrupt_enter();rt_tick_increase();rt_interrupt_leave();
}void rt_hw_board_init(void){/* * TODO 1: OS Tick Configuration* Enable the hardware timer and call the rt_os_tick_callback function* periodically with the frequency RT_TICK_PER_SECOND. */SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);/* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INITrt_components_board_init();
#endif#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}

5、board.c文件下 添加头文件#include "stm32f10x.h",main.c文件下添加头文件                #include <rtthread.h>。

6、编写测试例程

void thread01_entry( void *parameter);
static rt_thread_t thread01 = RT_NULL;int main(void)
{	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);	 //串口初始化为115200LED_Init();			     //LED端口初始化thread01 = rt_thread_create( "thread01",thread01_entry,RT_NULL,512,3,20);  rt_thread_startup(thread01);
}void thread01_entry( void *parameter)
{while(1){LED0=!LED0;rt_thread_delay(2000);}
}//void thread01_entry( void *parameter)
//{
//	u16 t;  
//	u16 len;	
//	u16 times=0;
//	while(1)
//	{
//		if(USART_RX_STA&0x8000)
//		{					   
//			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
//			printf("\r\n您发送的消息为:\r\n\r\n");
//			for(t=0;t<len;t++)
//			{
//				USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
//				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
//			}
//			printf("\r\n\r\n");//插入换行
//			USART_RX_STA=0;
//		}else
//		{
//			times++;
//			if(times%5000==0)
//			{
//				printf("\r\n战舰STM32开发板 串口实验\r\n");
//				printf("正点原子@ALIENTEK\r\n\r\n");
//			}
//			if(times%200==0)printf("请输入数据,以回车键结束\n");  
//			if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
//			rt_thread_delay(10);   
//		}
//	}
//}

http://www.xdnf.cn/news/1001521.html

相关文章:

  • 学习笔记整理之状态图与状态图搜索
  • Windows 提权工具(“Potato“ 系列)用法指南
  • 火线、零线、地线 基础知识
  • 实现图片懒加载
  • 大话软工笔记—架构的概要设计
  • 【AS32系列MCU调试教程】基础配置:Eclipse项目与工具链的优化
  • SD-WAN优化云应用与多云架构访问的关键策略
  • 408考研逐题详解:2009年第39题
  • 深入探索IIC-OLED显示技术:嵌入式仿真平台如何重塑高校教学范式——深圳航天科技创新研究院技术赋能新一代工程教育
  • 观点 | 科技企业到了品牌建设的历史性窗口期
  • 界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现服务安排?
  • Kratos 与Golang Cms的关系
  • 深度学习环境搭建(pycharm+yolov5)
  • 【AWS入门】IAM多重身份验证(MFA)简介
  • 深度解析Git错误:`fatal: detected dubious ownership in repository` 的根源与解决方案
  • OpenAI API:LLM编程的事实标准(上)
  • R语言缓释制剂QBD解决方案之五
  • GitLab 拉取变慢的原因及排查方法
  • UE5 学习系列(九)光照系统介绍
  • linux中的locate命令
  • Vue3+TypeScript实现状态模式
  • cuda编程笔记(3)--常量内存与事件
  • 嘉立创EDA初识
  • 外资车全面反弹,被看衰的日系车尤其凶猛,国产电车再承压
  • 智慧园区可视化怎么做?
  • 快速排序优化技巧详解:提升性能的关键策略
  • Python爬虫实战:研究AutobahnPython相关技术
  • 股指期货为什么会出现贴水现象?
  • Redis : set集合
  • 使用 Visual Studio 2019 修改 WebRTC 源码