Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9396814
  • 博文数量: 1748
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20070
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1748)

文章存档

2024年(23)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Android平台

2017-08-14 11:01:30

1. 介绍
     标准STM32下载方式:
  • U-LINK / J-LINK 烧写
  • ISP烧写.(串口方式. 硬件 BOOT0跳到3.3V   BOOT1跳到GND.按复位后 启动ISP烧录软件  烧录时记得选择 擦除选项)
  • 前言:本开发板串口下载分2种方式

    方式1:官方下载方式(配套官方下载软件,步骤繁琐,下载复杂)

        下载软件:官方配套软件(Flash loader)    
        
    下载硬件:USBTTL串口通讯工具(注意不是RS232,  232电平为+12   TTL电平为+5V )

     

    操作步骤:1. BOOT0GND   BOOT13.3V

              2. 连接串口线(RX->TX    TX->RX   GND->GND)

              3. 复位开发板

              4. 启动下载软件,选择串口号,

              5. 如不出意外,加载需下载程序文件,下载完成。

              6. 拔掉BOOT0 , BOOT1线

              7. 复位,程序运行。

     

    方式2:本店下载方式(配套国内第三方下载软件,步骤简单,下载容易)

         下载软件:国内第三方下载软件(mcuisp)
        
    下载硬件:本店配套USBTTL下载器

     

    操作步骤:1. 接好排线

              2. 打开软件(选择好串口号)

              3. 点击下载按钮

              4. 程序运行
  • 点击(此处)折叠或打开

    1. STM32F103RCT6开发板
    2.  板载为STM32F103RCT6芯片. Cortex-M3 32-bit RISC
    3.  72MHz,1.25 DMIPS/MHz;工作电压:2-3.6V. 8M晶振可通过倍频设置,令主频为72M
    4.  封 装:LQFP64;I/O口:64
    5.  存储资源:256kB Flash,48kB RAM (方便移植UCGUI LWIP等等占用资源比较多的协议包)
    6.  接口资源:2xSPI,5xUSART,1xI2S,2xI2C LCD,1xSDIO,1xUSB,1xCAN
    7.  模数转换:3xAD(12位,1us,分时16通道),2xDA(12位)
    8.  调试下载:支持JTAG/SWD接口的调试下载,支持IAP
    9.  采用AMS1117-3.3V芯片,将电压稳压为3.3V
    10.  电源LED, 用户LED, 复位按键.

    startup_stm32f10x_cl.s 互联型的STM32F105xx,STM32F107xx 
    startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx 
    startup_stm32f10x_hd_vl.s 大容量的STM32F100xx 
    startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx 
    startup_stm32f10x_ld_vl.s 小容量的STM32F100xx 
    startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32F103xx 
    startup_stm32f10x_md_vl.s 中容量的STM32F100xx 
    startup_stm32f10x_xl.s 超大容量FLASH在512K到1024K字节的STM32F101xx,STM32F102xx,STM32F103xx 
    一般说STM32单片机的命名都是STM32F103XYZW这样的方式,其中X表示引脚数,Y表示ROM容量,Z表示封装方式,W表示工作温度范围,比如RCT6表示为64引脚、256KB和LQFP封装,工业温度范围。
    针对ROM容量的字符,表示的容量是:
    6-32KB    8-64KB  B-128KB  C-256KB   D-384KB   E-512KB   F-768KB   G-1024KB
    其中:ROM容量为16~32K就是LD       64K~128K的就是MD    256~512K的就是HD  (RCT6应当采用 HD)


2. 测试LED
工程代码 0.zip.  
硬件连接: PD2和 LED脚短接, 串口接GND/PA9/PA10. 
测试: PC端打开sscom32 9600 N 8 1 打开串口, 定时1000ms 自动发送 Hex 45 0d 0a, 然后会收到 USART_RX_BUF=[E]. 字样. 且 RCT6板子上 LED 持续交替亮灭.

3. 移植FreeRTOS
    借助 cubeMX (一定先装JDK1.7.0_45版本, ST够坑爹), help -> install new library. 选择 STM32F1的最新中间件(目前是 1.6.0).
   在 cubeMX 中新建工程 RCT6_FreeRTOS_Template, 选择芯片 stm32f103rc, 选中 FreeRTOS/uart1,同时把PD2设置成output,  点击菜单"Generate Code"产生 MDK5 的工程代码.

    用Keil打开工程, 设置 project options, 确认 Device stm32f103rc, IROM=0x40000=256KB IRAM=0xC00048KB, Xtal=8Mhz  Debug中FlashDownload对应的为256KB的设备.
    同时需要 屏蔽代码 __HAL_AFIO_REMAP_SWJ_DISABLE(); 否则 Debug 无法在线调试.

    范例实现了线程中每秒亮灭LED, 同时通过Queue通知串口线程状态, 串口同时收取PC端指令, 退出线程.
   

工程太大, main.zip

也可以在 keil 5 中直接使用 FreeRTOS.
1. 在 上下载 FreeRTOSv9.0.0.exe. 双击安装. 大概下载约  305MB 的内容.
2. 进入 FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_Keil 目录, 打开keil工程, 出现. 这里写图片描述 单击“Migrate to Device Pack”按钮,接着单击“确定”按钮,编译就可以了.
3. 在 keil 5 中建立工程, 在 
manager Run-Time Enviroment 窗口中可以可选 FreeRTOS.


另外一种RTOS的方式, 直接使用 Keil RTX 
1. 新建 STM32F103RC的新工程. 在 manager Run-Time Enviroment 窗口下. 选中 1. CMSIS->CORE  2.CMSIS->RTOS2(API)->Keil RTX5  3. device -> startup 其他附加项.
2. 然后添加自定义 main.c 以及其他HAL等内容.
CMSIS Driver层的USART驱动:
1. 选择CMSIS Driver 的USART. (额外会添加 DMA支持)
2. 配置RTE_Device.h
, 设置High-speed Clock为8M, 并且设置 USART1的TX RX为PA9/10

  1. extern ARM_DRIVER_USART Driver_USART1;
  2. void myUSART1_Callback(uint32_t event)
  3. {
  4.   //留作空实现, event = (ARM_USART_EVENT_SEND_COMPLETE, ARM_USART_EVENT_CTS ...)
  5. }

  6. static ARM_DRIVER_USART *USARTdrv = &Driver_USART1;
  7.   USARTdrv->Initialize( myUSART1_Callback );
  8.   USARTdrv->PowerControl(ARM_POWER_FULL);
  9.   USARTdrv->Control(ARM_USART_MODE_ASYNCHRONOUS | ARM_USART_DATA_BITS_8 | ARM_USART_PARITY_NONE | ARM_USART_STOP_BITS_1 | ARM_USART_FLOW_CONTROL_NONE, 115200);
  10.   USARTdrv->Control(ARM_USART_CONTROL_TX, 1);
  11.   
  12.   USARTdrv->Send("Hello world\r\n", 13);

  13. 确实很好用啊. 内部细节基本上不用考虑了.可怜哥做了这么多年的驱动,感觉离下岗不远了.
使用内置的printf
1. 使用菜单"project->manager->run time enviroment", 选择COMPILE->IO -> STDOUT 
2. 新添加文件"User Code Template" -> Compiler -> STDOUT via USART. 产生 stdout_USART.c 文件, 配置此文件设置串口号为1 以及波特率 115200. 即可.
3. main 代码中 
  1. extern int stdout_init (void);
  2. stdout_init();
  3. printf("Hello World.\r\n");

  4. 这么简单, 让底层人员怎么活.




--------------------------------------------------------------------------------------------------------------
http://blog.csdn.net/u011976086/article/details/54342447
http://blog.csdn.net/u011976086/article/details/73236540
http://blog.csdn.net/u011976086/article/details/75258499  # USB CDC
http://blog.csdn.net/u011976086/article/details/75305602  # RTC

如何使用RTX建立工程的实例, 很详细了, keil RTX 官网上有 getting startted PDF, 写的也很详细.  
--c99 编译选项加上去编译就OK. 要扩展多个外设, 使用菜单"project->manager->run time enviroment" , 切记使用 MDK-PLUS 版本

LED灯 Toggle + console 输入输出的 RTX 例程.
 


4. 各种外设

5. 电机控制. IMU + 双轮轨迹
阅读(3141) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~