ffxz 发表于 2009-4-17 11:05:13

RT-Thread/STM32F103VB分支0.3.0 beta2版本

RT-Thread/STM32F103VB 0.3.0 beta2版本,兼容STM32F103C8/STM32F103CB, STM32F103R8/STM32F103RB, STM32F103V8/STM32F103VB

修改记录:
- 修正message queue创建时内存分配的问题。
- 修正pendsv异常优先级过高的问题。
- 更改rt_console_puts为rt_hw_console_output,并由各个board自行实现,如果设置rt_hw_console_output为空函数,那么rt_kprintf将自动不起作用。
- 设备驱动框架中添加两个回调函数,设置回调函数的接口为:
    * rt_device_set_rx_indicate,rx_indicate回调函数在设备驱动收到数据时调用,以通知上层应用有多少字节大小的数据已经接收(上层应用此时可以主动调用rt_device_read进行接收)。
    * rt_device_set_tx_complete,tx_complete回调函数在驱动设备完成数据写入时调用,以通知上层应用数据已经写入完成(如果数据是动态申请的,可以在此时释放)。
设备驱动框架内部相关调用实现:
    * rt_device_open/close,如果驱动设备是DMA接收模式,那么调用open将打开DMA开始进行接收,close则关闭DMA。
    * rt_device_read,设备驱动从设备中读取(轮询模式),或从已经接收到的buffer中读取(接收中断模式、DMA接收模式)
    * rt_device_write,设备驱动往设备中写入数据(轮询模式),或挂接到链表中,等待DMA传输完成(如果当前DMA没使能,那么使能DMA直接进行发送)。
- STM32串口设备,实现在libcpu\stm32\serial.c中,发送支持轮询,DMA发送;接收支持轮询,中断接收,DMA接收等方式。
    * 串口设备的注册在bsp\stm32f103vb\usart.c中,当前默认注册为
      + uart1, 轮询发送,中断接收, 中断接收通知指向finsh,rt_hw_console_output则轮询发送(不产生中断)。
      + uart2, DMA接收,轮询发送
      + uart3, 中断接收,DMA发送
- bsp\stm32f103vb\application.c是几个串口设备的使用例子。

这个版本需要RealView MDK编译环境。

BTW:
请能够在STM32开发板上使用RT-Thread的兄弟发个贴说一下,不成功也说一下,我们会跟进进行相应的支持。如果想要在STM32F103VB以外的芯片上使用(例如SRAM不是20K的情况),也请说出来,我们会根据相应的芯片把修改的地方说出来。STM32F103ZE的除外(USART2的pin配置不同),它会有专门的版本。

点击此处下载 ourdev_437267.zip(文件大小:313K) (原文件名:rt-thread-0.3.0 beta2 stm32f103vb.zip)
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_437268.jpg
RT-Thread运行画面 (原文件名:rtt_stm32.jpg)

panxiaoku 发表于 2009-4-17 11:17:02

先顶一个,昨天 在官方下了一下前面的版本,下个新的,,,准备用一下试试。。。。。

ffxz 发表于 2009-4-17 13:56:36

试完还请给出运行结果,谢谢了。

dragonwww 发表于 2009-4-17 17:12:32

呵呵,终于横空出世了,下来尝尝鲜,准备用在STM32F103R8上试试。

theta 发表于 2009-4-17 20:37:27

下载,编译,运行,可以得到楼主位类似的结果。

建议楼主下次提醒下要测试哪些内容。

theta 发表于 2009-4-17 21:37:58

finsh 好像有点问题, 无法解析命令

aozima 发表于 2009-4-18 19:56:29

./bbs_upload/files_14/ourdev_437825.jpg
替马大哈楼主回答问题:
To 【5/6楼】 theta
测试的内容其实非常简单,只有系统运行起来,finsh能够接收输入,例如输入 list_thread() 会有各个线程运行的状况。

其他的(和硬件无关的),我已经做过验证的。

finsh有问题,无法解析命令。不知道你的步骤是怎么样的?能解析 list() 吗?

dragonwww 发表于 2009-4-18 23:19:42

期待文档早点见面:)

我只简单的把配置换为STM32F103R8,编译时只有两个warning如下,并无大碍:
..\..\src\kservice.c(915): warning:#177-D: function "__tolower" was declared but never referenced
..\..\finsh\finsh_parser.c(719): warning:#111-D: statement is unreachable


程序运行正常:
\ | /
- RT - Thread Operating System
/ | \ 0.3.0 build Apr 18 2009
2006 - 2009 Copyright by rt-thread team
thread1 --> 1
finsh>>Thread2 count:1
thread1 --> 2
Thread2 count:2
Thread2 count:3
thread1 --> 3
Thread2 count:4
Thread2 count:5
thread1 --> 4
Thread2 count:6
Thread2 count:7
list()

--Function List:
hello            -- say hello world
version          -- show RT-Thread version information
list_thread      -- list thread
list_sem         -- list semaphone in system
list_event       -- list event in system
list_mutex       -- list mutex in system
list_mailbox   -- list mail box in system
list_msgqueue    -- list message queue in system
list_mempool   -- list memory pool in system
list_timer       -- list timer in system
list             -- list all symbol in system
--Variable List:
dummy            -- dummy variable for finsh
        0, 0x0000
finsh>>

        0, 0x0000
finsh>>thread1 --> 5
Thread2 count:8
Thread2 count:9
thread1 --> 6
Thread2 count:10
Thread2 count:11

ffxz 发表于 2009-4-20 08:54:49

在整RT-Thread的文件系统了,有STM32F103VB/RB SPI SDCard接口的同志请举手!呵呵,在STM32F103ZE上整合完后还请帮忙测试(SPI SDCard的驱动我会预先给一个)

pldjn 发表于 2009-4-20 09:06:36

在那边注册了个ID,与这里相同,结果PASS忘记了.发了两次邮件也没有人回应,请帮恢复下密码

ffxz 发表于 2009-4-20 09:15:05

那边似乎邮件不通:-P 密码已经重置,密码发到你注册的信箱了。

theta 发表于 2009-4-22 15:50:44

问题找到了, 是我的串口调试软件有问题, 在超级终端上可以。

我有STM32F103VB SPI SDCard接口

ffxz 发表于 2009-4-22 16:44:35

好啊,RT-Thread的文件系统快好了,读已经没问题了,写还在调试,今天晚上估计可以搞定。然后就是做一些常规测试、多线程模式下的文件访问测试和压力测试,完了后就可以发布了。

PZLPDY 发表于 2009-4-22 22:30:55

稍微看了一下串口的代码,有103VB的板子的可以测试一下用DMA接收的那个串口,用串口调试软件往串口不间断发送字符,发一段时间之后再恢复正常,看看VB的板子是否还能收到字符?

yucnet 发表于 2009-4-26 20:22:25

ffxz
   您好,我研究一下RT-Thread for stm32,怎么得到STM32F103ZE移植代码?
   谢谢?
   我的邮箱是yuxinyinet@163.com

ffxz 发表于 2009-4-27 20:33:18

如果是研究,可以先研究RT-Thread for STM32F103VB,核心都是一个

RT-Thread/STM32F103ZE过几天发布,需要完善一下文件系统里的缓存层

ffxz 发表于 2009-4-29 09:22:54

求一个万利板SPI方式SD卡的驱动,最好是试过能用的,这样我好改成RT-Thread的,然后再配上文件系统就都OK了。

yucnet 发表于 2009-4-29 22:51:54

to ffxz,
   http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3238182&bbs_page_no=1&bbs_id=3020
   “FATFS R0.06版本测试程序 已经测试成功,欢迎使用 ”
   上的驱动可以!
   我用这个驱动稍加修改(修改了管脚)我用的STM32F103ZE。
   FATFS R0.06版本测试程序 已经测试成功,欢迎使用

ffxz 发表于 2009-4-29 22:57:15

To 【12楼】 theta
你信箱多少?STM32F103VB的文件系统已经制作出一个版本了

编译,-O3:
Program Size: Code=26794 RO-data=3122 RW-data=580 ZI-data=13948
体积有些大了,争取再缩小些,这个文件系统里包含了5k byte的cache空间。

我用的SPI配置:
void SPI_Config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
SPI_InitTypeDef   SPI_InitStructure;

/* GPIOA and GPIOC Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
/* SPI1 Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

/* Configure SPI1 pins: SCK, MISO and MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure PC12 pin: CS pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);

/* SPI1 Config */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);

/* SPI1 enable */
SPI_Cmd(SPI1, ENABLE);
}

ffxz 发表于 2009-4-29 22:58:12

To 【18楼】 yucnet
我用的STM32F103ZE是用SDIO的,文件系统已经能够正常运行,你是用SPI方式的吗?

yucnet 发表于 2009-4-30 12:50:40

to ffxz
   我用的是spi方式的,没有测试sdio!有什么要帮忙的告诉我?

theta 发表于 2009-4-30 16:34:07

to【19楼】 ffxz :

邮件地址已经发到http://www.rt-thread.orgbernard 的短信里

ffxz 发表于 2009-5-1 10:59:04

To 【22楼】 theta
STM32F103VB的文件系统测试版本已经发给你了,还请多帮帮忙,谢谢。

ffxz 发表于 2009-5-1 11:14:26

STM32F103ZE推迟些发布吧,打算把TCP/IP协议栈加上再发布。

theta 发表于 2009-5-1 19:17:20

to 【23楼】 ffxz

不客气。 我的SPI配置是这样的:

void SPI_Config(void)
{
u16 i,j;
GPIO_InitTypeDefGPIO_InitStructure;
SPI_InitTypeDef   SPI_InitStructure;

/* GPIOA and GPIOC Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
/* SPI1 Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

/* Configure SPI1 pins: SCK, MISO and MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure PD9 pin: CS pin,PD10 : SD Power*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);



/* SPI1 Config */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);

/* SPI1 enable */
SPI_Cmd(SPI1, ENABLE);

    GPIO_ResetBits(GPIOD, GPIO_Pin_10);// SD卡上电,打开MOS管
for(i=0;i<65530;i++)
{
    for(j=0;j<5000;j++)
    {;}
}
}

另外

/* Select MSD Card: ChipSelect pin low*/
#define MSD_CS_LOW()   {GPIO_ResetBits(GPIOD, GPIO_Pin_9);}
/* Deselect MSD Card: ChipSelect pin high */
#define MSD_CS_HIGH()    GPIO_SetBits(GPIOD, GPIO_Pin_9)

上电后, 粗暴延迟了一段时间。 文件系统可以跑起来。

没有设置优化,编译结果如下:
Program Size: Code=37682 RO-data=3306 RW-data=580 ZI-data=9412

finsh>>list_mem()
total memory: 10464
used memory : 2608
maximum allocated memory: 4748
      0, 0x0000

ffxz 发表于 2009-5-1 22:00:31

多谢,这样STM32F103VB的beta3版本就可以考虑发布了!

由于影响速度另外一个重要因数是批量数据的读写,所以这个如果可能会在下一个beta版中加入。
页: [1]
查看完整版本: RT-Thread/STM32F103VB分支0.3.0 beta2版本