当前位置: 首页 > 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);   
//		}
//	}
//}

相关文章:

  • Django(自用)
  • 无人机遥控器低延迟高刷新技术解析
  • 38道Linux命令高频题整理(附答案背诵版)
  • [python] 使用python设计滤波器
  • Python实战应用-Python实现Web请求与响应
  • Verilog基础:标识符的定义位置
  • Vue 中 this.$emit(‘mount‘) 的妙用
  • [C++][设计模式] : 单例模式(饿汉和懒汉)
  • 2.监控领域中行业黑话知识学习指南
  • 使用Ollama+open-webui搭建本地AI模型
  • 写实交互数字人:赋能消防知识科普,点亮智能交互讲解新未来
  • word表格批量转excel,提取表格数据到excel
  • SpringBoot+Junit在IDEA中实现查询数据库的单元测试
  • ⭐ Unity 实现屏幕涟漪效果:自动生成 \ 点击交互生成涟漪
  • 基于OpenCV和深度学习实现图像风格迁移
  • 分布式光纤测温及红外测温系统的区别?
  • 68、.NET Entity Framework(EF)
  • 每日Prompt:宫崎骏风格插画
  • YOLOv2 技术详解:目标检测的又一次飞跃
  • 大模型Prompt|提示工程的10个常见设计模式
  • 南京做网站的公司/北京seo包年
  • 浙江舟山建设厅网站/完美日记网络营销策划书
  • 湖南城市建设职业技术学院官方网站/微信营销技巧
  • 网络网站排名优化/百度域名
  • 东莞模块网站建设方案/宁波优化网站厂家
  • 网站限制国内ip访问/50个市场营销经典案例