Chinaunix首页 | 论坛 | 博客
  • 博客访问: 178775
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2016-02-01 12:35
个人简介

不断超越自己,将更强大!

文章分类

全部博文(35)

文章存档

2022年(1)

2017年(5)

2016年(29)

我的朋友

分类: 嵌入式

2016-05-16 21:09:05

       RTEMS 4.11已经支持STM32F4系列的BSP了,因此移植还是相当的简单。移植过程如下:

(1)开发环境的建立:使用官方的工具链直接生成RTEMS 4.11的工具链(gcc 4.9.3)。


(2)下载RTEMS 4.11的内核源码(分支:4.11)。


(3)修改内核源码与stm32f429相关的配置文件。(默认为:stm32f407 168MHz 我使用stm32f429 180MHz)。

修改:  rtems-4.11/c/src/lib/libbsp/arm/stm32f4/configure.ac



[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. AC_PREREQ([2.69])  
  2. AC_INIT([rtems-c-src-lib-libbsp-arm-stm32f4],[_RTEMS_VERSION],[https://devel.rtems.org/newticket])  
  3. AC_CONFIG_SRCDIR([bsp_specs])  
  4. RTEMS_TOP(../../../../../..)  
  5.   
  6. RTEMS_CANONICAL_TARGET_CPU  
  7. AM_INIT_AUTOMAKE([no-define nostdinc foreign 1.12.2])  
  8. RTEMS_BSP_CONFIGURE  
  9.   
  10. RTEMS_PROG_CC_FOR_TARGET  
  11. RTEMS_CANONICALIZE_TOOLS  
  12. RTEMS_PROG_CCAS  
  13.   
  14. RTEMS_CHECK_NETWORKING  
  15. AM_CONDITIONAL(HAS_NETWORKING,test "$HAS_NETWORKING" = "yes")  
  16.   
  17.   
  18. RTEMS_BSPOPTS_SET([STM32F4_FAMILY_F4XXXX],[stm32f4*],[1])  
  19. RTEMS_BSPOPTS_HELP([STM32F4_FAMILY_F4XXXX],[Chip belongs to the STM32F4XXXX family.])  
  20.   
  21. RTEMS_BSPOPTS_SET([STM32F4_HSE_OSCILLATOR],[*],[8000000])  
  22. RTEMS_BSPOPTS_HELP([STM32F4_HSE_OSCILLATOR],[HSE oscillator frequency in Hz])  
  23.   
  24. RTEMS_BSPOPTS_SET([STM32F4_SYSCLK],[*],[180000000])  
  25. RTEMS_BSPOPTS_HELP([STM32F4_SYSCLK],[SYSCLK frequency in Hz])  
  26.   
  27. RTEMS_BSPOPTS_SET([STM32F4_HCLK],[*],[180000000])  
  28. RTEMS_BSPOPTS_HELP([STM32F4_HCLK],[HCLK frequency in Hz])  
  29.   
  30. RTEMS_BSPOPTS_SET([STM32F4_PCLK1],[*],[45000000])  
  31. RTEMS_BSPOPTS_HELP([STM32F4_PCLK1],[PCLK1 frequency in Hz])  
  32.   
  33. RTEMS_BSPOPTS_SET([STM32F4_PCLK2],[*],[90000000])  
  34. RTEMS_BSPOPTS_HELP([STM32F4_PCLK2],[PCLK2 frequency in Hz])  
  35.   
  36. RTEMS_BSPOPTS_SET([STM32F4_USART_BAUD],[*],[115200])  
  37. RTEMS_BSPOPTS_HELP([STM32F4_USART_BAUD],[baud for USARTs])  
  38.   
  39. RTEMS_BSPOPTS_SET([STM32F4_ENABLE_USART_1],[*],[])  
  40. RTEMS_BSPOPTS_HELP([STM32F4_ENABLE_USART_1],[enable USART 1])  
  41.   
  42. RTEMS_BSPOPTS_SET([STM32F4_ENABLE_USART_2],[*],[])  
  43. RTEMS_BSPOPTS_HELP([STM32F4_ENABLE_USART_2],[enable USART 2])  
  44.   
  45. RTEMS_BSPOPTS_SET([STM32F4_ENABLE_USART_3],[*],[1])  
  46. RTEMS_BSPOPTS_HELP([STM32F4_ENABLE_USART_3],[enable USART 3])  
  47.   
  48. RTEMS_BSPOPTS_SET([STM32F4_ENABLE_UART_4],[*],[])  
  49. RTEMS_BSPOPTS_HELP([STM32F4_ENABLE_UART_4],[enable UART 4])  
  50.   
  51. RTEMS_BSPOPTS_SET([STM32F4_ENABLE_UART_5],[*],[])  
  52. RTEMS_BSPOPTS_HELP([STM32F4_ENABLE_UART_5],[enable UART 5])  
  53.   
  54. RTEMS_BSPOPTS_SET([STM32F4_ENABLE_USART_6],[*],[])  
  55. RTEMS_BSPOPTS_HELP([STM32F4_ENABLE_USART_6],[enable USART 6])  
  56.   
  57. RTEMS_BSPOPTS_SET([STM32F4_ENABLE_I2C1],[*],[])  
  58. RTEMS_BSPOPTS_HELP([STM32F4_ENABLE_I2C1],[enable I2C 1])  
  59.   
  60. RTEMS_BSPOPTS_SET([STM32F4_ENABLE_I2C2],[*],[])  
  61. RTEMS_BSPOPTS_HELP([STM32F4_ENABLE_I2C2],[enable I2C 2])  
  62.   
  63. RTEMS_BSP_CLEANUP_OPTIONS(0, 0)  
  64. RTEMS_BSP_LINKCMDS  
  65.   
  66. AC_CONFIG_FILES([Makefile])  
  67. AC_OUTPUT  



(4)修改启动部分的初始化函数:

/rtems-4.11/c/src/lib/libbsp/arm/stm32f4/startup/bspstart.c



[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /* APB1 prescaler, APB1 clock must be < 45MHz */  
  2.  apbpre1 = ( sys_clk * 100 ) / 45;  
  3.   
  4.  if ( apbpre1 <= 100 ) {  
  5.    apbpre1 = RCC_CFGR_PPRE1_BY_1;  
  6.  } else if ( apbpre1 <= 200 ) {  
  7.    apbpre1 = RCC_CFGR_PPRE1_BY_2;  
  8.  } else if ( apbpre1 <= 400 ) {  
  9.    apbpre1 = RCC_CFGR_PPRE1_BY_4;  
  10.  } else if ( apbpre1 <= 800 ) {  
  11.    apbpre1 = RCC_CFGR_PPRE1_BY_8;  
  12.  } else if ( apbpre1 ) {  
  13.    apbpre1 = RCC_CFGR_PPRE1_BY_16;  
  14.  }  
  15.   
  16.  /* APB2 prescaler, APB2 clock must be < 90MHz */  
  17.  apbpre2 = ( sys_clk * 100 ) / 90;  
  18.   
  19.  if ( apbpre2 <= 100 ) {  
  20.    apbpre2 = RCC_CFGR_PPRE2_BY_1;  
  21.  } else if ( apbpre2 <= 200 ) {  
  22.    apbpre2 = RCC_CFGR_PPRE2_BY_2;  
  23.  } else if ( apbpre2 <= 400 ) {  
  24.    apbpre2 = RCC_CFGR_PPRE2_BY_4;  
  25.  } else if ( apbpre2 <= 800 ) {  
  26.    apbpre2 = RCC_CFGR_PPRE2_BY_8;  
  27.  } else {  
  28.    apbpre2 = RCC_CFGR_PPRE2_BY_16;  
  29.  }  
  30.   
  31.  rcc->cr |= RCC_CR_HSION;   /* turn on HSI */  
  32.   
  33.  while ( ( !( rcc->cr & RCC_CR_HSIRDY ) ) ) ;  




   (5) 目前修改这么多,就可以了,后期还需要继续修改。

然后在rtmes-4.11主目录,执行编译相关的命令。

# ./bootstrap -c

#./boostrap -p

#./bootstrap


#cd ..

#mkdir stm32f4

#cd stm32f4

../rtems-4.11/configure --target=arm-rtems4.11 --disable-posix --disable-itron --disable-cxx --disable-networking  --enable-rtemsbsp="stm32f4" --prefix=/home/RTEMS/stm32f4

#make
#make install

(6)这样,在  stm32f4/arm-rtems4.12/c/stm32f4/testsuites/samples/hello目录下,就能生成测试文件
(7)编译stlink 的工具,生成st-flash等工具
(8)arm-rtems-objcopy -O binary hello.exe hello.bin可以生成bin文件,
st-flash write hello.bin 0x8000000即可下载到开发板。
(9)连接串口为:串口3 TTL电平,需要USB转TTL(3.3V TTL)等工具看一下输出效果。

        如果成功打印,说明STM32F429 RTEMS BSP基本上正常了,可以再试一下ticker fileio等测试程序,基本上可以验证RTEMS是否成功运行。



我移植的下载地址:

阅读(2188) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~