Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Ozone
[Nano] rtthread nano增加stm32l152rb芯片
发布于 2020-04-04 19:01:30 浏览:1366
订阅该版
[tocm] rtthread nano增加stm32l152rb芯片 论坛markdown,图片不好整理,其他的看附件吧 ![image-20200404170709542.png](/uploads/202004/04/185707dn5hzeshtbz3s397.png) # 前言 手头项目,硬件搞了板子,原理图没给我,今天想搞,摸黑整吧。电脑不行,虽说mdk使用了clang6作为编译器,速度很快,但用下来,gcc更快,所以主要使用gcc作为编译主力; 用rtthread SCons的构建工程,master版本用习惯了,越来越喜欢这个构建工具,nano没有,想办法让他有; # 建立工程 ## copy tools 主路径的rtconfig.py 要借助rt-thread下的tools文件下的脚本进行工程构建;因此,首要把从master 版本中把这个东西copy过来;nano要仿照master版本的文件结构来进行文件规划;熟悉后,也可以修改;但箭头处的几个文件是必须的。 ## copy rt-threa.py stm32l152 是 cortex m3 的内核,从master处的bsp路径下copy 一个rt-thread.py 文件。 ## copy SConscipts SConstruct 主路径SConstruct, 对应路径的SConscipts # 修改rtthread.py SConscipts SConstruct ## rtthread.py 有个关键参数,链接文件的位置 ![image-20200404175649704.png](readmeForStm32L152.assets/image-20200404175649704.png) ```python LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict' ``` ## SConstuct 然后就是修改构建文件SConstuct:我没有用HAL_Drivers(RT官方针对stm32 hal的驱动代码),注释掉; ![image-20200404174435720](readmeForStm32L152.assets/image-20200404174435720.png) ## SConscipts 然后就是修改一些主要的SConscipts文件; ![image-20200404175111374.png](readmeForStm32L152.assets/image-20200404175111374.png) 1处文件,主要是启动文件的修改; ```python if rtconfig.CROSS_TOOL == 'gcc': src += [startup_path_prefix + '/STM32L1xx_HAL/CMSIS/Device/ST/STM32L1xx/Source/Templates/gcc/startup_stm32l152xb.s'] elif rtconfig.CROSS_TOOL == 'keil': src += [startup_path_prefix + '/STM32Llxx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/arm/startup_stm32l152xb.s'] elif rtconfig.CROSS_TOOL == 'iar': src += [startup_path_prefix + '/STM32Llxx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/iar/startup_stm32l152xb.s'] ``` 2处文件,主要是根据依赖,添加库文件; cubeMX给的gcc启动文件有点问题,拿来稍微修改下,或者把rtthread_startup(); 放到主函数,这样main就不要作为一个线程了;mian的线程栈在哪里? ![image-20200404180001504](readmeForStm32L152.assets/image-20200404180001504.png) # stm32CubeMX 生成库文件 ![image-20200404181218694.png](readmeForStm32L152.assets/image-20200404181218694.png) 首次生成后,将文件copy到下图路径处,以后勾选 `2` 就可以了,这个路径下的SConsript文件控制,哪个hal库文件编译。 ![image-20200404181409438.png](readmeForStm32L152.assets/image-20200404181409438.png) Scons编译正常了,哈哈 ![image-20200404181708870](readmeForStm32L152.assets/image-20200404181708870.png) # Ozone 调试 硬件没把原理图给我,没有把串口接出来,串口直接通485芯片了,有灯,不知哪个管脚控,程序有没有跑,gcc编译有没有ok;Ozone来了;选片子,选svg文件,选elf文件。ok,搞定,可以跑了。 ![image-20200404182126672.png](readmeForStm32L152.assets/image-20200404182126672.png) # finish ## SEGGER_RTT_rtthread_nano接口 想用一下finish,没有串口,有j-link,那就J-link RTT了。仿照SEGGER_RTT_Device.c SEGGER_RTT_rtthread_nano.c; 主要解决使用J-link RTT client出现的乱码,不显示msh>等问题; ```c /************************************************************************* * File Name : SEGGER_RTT_rtthread_nano.c * Brief : * Change Logs : * Date Author Notes * 2020\04\04 liqi The first version. *************************************************************************/ #include
#include
#include
#include "SEGGER_RTT.h" static rt_size_t rt_segger_rtt_read(void *buffer, rt_size_t size) { return SEGGER_RTT_Read(0, buffer, size); } /* 移植控制台,实现控制台输出, 对接 rt_hw_console_output */ char send_buf[256]; void rt_hw_console_output(const char *str) { rt_size_t i = 0, size = 0; rt_size_t s_len = 0; char a = ' '; char *p_str = str; size = rt_strlen(str); // SEGGER_RTT_printf(0,"%s", str); for (i = 0; i < size; i++) { s_len++; if (*(str + i) == '
') { memset(send_buf, '\0', sizeof(send_buf)); memcpy(send_buf, p_str, s_len); send_buf[s_len - 1] = ' '; send_buf[s_len] = '
'; SEGGER_RTT_printf(0, "%s", send_buf); p_str += s_len; s_len = 0; } } if (s_len > 0) { memset(send_buf, '\0', sizeof(send_buf)); memcpy(send_buf, p_str, s_len); SEGGER_RTT_printf(0, "%s", send_buf); } } #include
#define RTT_RX_BUF_LEN 64 rt_uint8_t rtterminal_rx_buf[RTT_RX_BUF_LEN] = {0}; struct rt_ringbuffer rtterminal_rxcb; /* 定义一个 ringbuffer cb */ struct rt_semaphore shell_rx_sem; /* 定义一个静态信号量 */ int rt_hw_rtt_console_init(void) { /* 初始化串口接收 ringbuffer */ rt_ringbuffer_init(&rtterminal_rxcb, rtterminal_rx_buf, RTT_RX_BUF_LEN); /* 初始化串口接收数据的信号量 */ rt_sem_init(&(shell_rx_sem), "shell_rx", 0, 0); return 0; } char rt_hw_console_getchar(void) { char ch = 0; /* 从 ringbuffer 中拿出数据 */ while (rt_ringbuffer_getchar(&rtterminal_rxcb, (rt_uint8_t *)&ch) != 1) { rt_sem_take(&shell_rx_sem, RT_WAITING_FOREVER); } return ch; } #define SEGGER_RTT_THREAD_STACKSIZE 512 #define SEGGER_RTT_THREAD_PRIOR 19 #define SERRER_RTT_THREAD_DELAY 5 static void segger_rtt_client_thread_entry (void *parameter) { unsigned int count = 0; char ch; rt_kprintf("Hello SEGGER Real-Time-Terminal
"); for (;;) { if ((count = SEGGER_RTT_HasData(0)) != 0) { /* 读取到数据,将数据存入 ringbuffer */ // rt_segger_rtt_read(&ch, 1); SEGGER_RTT_Read(0, &ch, 1); rt_ringbuffer_putchar(&rtterminal_rxcb, ch); } rt_sem_release(&shell_rx_sem); rt_thread_delay(rt_tick_from_millisecond(SERRER_RTT_THREAD_DELAY)); } } ALIGN(RT_ALIGN_SIZE) static rt_uint8_t segger_rtt_stack[SEGGER_RTT_THREAD_STACKSIZE]; static struct rt_thread segger_rtt_thread; int segger_rtt_client_thread_init(void) { int result; rt_hw_rtt_console_init(); result = rt_thread_init(&segger_rtt_thread, "rtdebug", segger_rtt_client_thread_entry, RT_NULL, (rt_uint8_t *)segger_rtt_stack, sizeof(segger_rtt_stack), SEGGER_RTT_THREAD_PRIOR, 20); if (RT_EOK == result) rt_thread_startup(&segger_rtt_thread); return result; } INIT_APP_EXPORT(segger_rtt_client_thread_init); ``` ## J-link RTT 1. J-link RTT view主要配置连接; 2. 命令行里启动client `JLinkRTTClient.exe -LocalEcho "off" ` list_thread一下,成了。 ![image-20200404170709542](readmeForStm32L152.assets/image-20200404170709542.png) 嗯,就这样了。我那什么接口都没有板子。 下载附件[readmeForStm32L152.pdf](/uploads/202004/04/190118py7fff7xjwdyvfp5.attach)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
1.4k
关于作者
yukelab
这家伙很懒,什么也没写!
提问
17
回答
47
被采纳
1
关注TA
发私信
相关问题
1
arm a53架构 调试rt-thread
2
rt_thread_mdelay函数影响在线调试
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部