社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 1968|回复: 3

[原创] EEDrone开源四旋翼从零开始(4)--DEMO开发

[复制链接]

468

TA的帖子

21

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-1-1 22:42:39 | 显示全部楼层 |阅读模式
本帖最后由 lb8820265 于 2017-1-1 23:04 编辑

      本贴来详细介绍下Demo工程的开发过程,Demo是完整功能的基础,也可以用来做测试。这里以UART功能DEMO为例,可以从零开始自己编写,也可以参考官方例程,也可以使用cubemx生成。
       打开CubeMX,选择STM32F767ZITX芯片或者NUCLEOF767开发版,这两者的差别不大,选择开发板会多一些宏定义,然后在左边的串口3如下设置:
1.png
     使用外部晶振
2.png
     时钟设计如下:
3.png
      串口三配置如下:
4.png
5.png
     CubeMX工程生产设置如下:
6.png
7.png
      最后点击ProjectàGenerate Code生成工程文件。在生成的工程如下:
8.png
       在EEDrone的Example中新建一个文件夹”UART_Test”
9.png
       将生成的工程中Src中的文件复制到新建的文件夹中,注意“system_stm32f7xx.c’不要复制,因为都是一样的,这里inc文件夹是可以不复制进来的,因为主工程包含了,最后文件夹文件如下:
10.png
     然后使用IAR(推荐使用IAR7.7版本)打开工程,在Example上右击àaddàadd group,填写”UART_Test”如下图:
11.png
      在新建文件夹上右击addàadd file,将刚刚的文件夹中的内容全部选中,点击打开。
12.png
      然后在”User”文件夹和Example文件夹中其他文件夹都排除编译,在文件夹上右击案后勾上”Eculude from build”,然后ProjectàRebuild all。每次更换Demo都需要重新编译。
13.png
        编写代码我推荐使用sourceinside,他能写代码的效率提高不少,当然也可以直接使用IAR,或者其他的软件,这个没有什么问题。sourceinside工程的添加方法就不介绍了,这里介绍个插件与小技巧。SI是不支持标签的,这个有时候会非常不方便,可以使用这个sihook插件下载地址:审核中。。。
直接将插件复制到根目录就好,下面是效果图:
14.png
       由于工程中有很多例子,这也就会导致很多的main.c文件和其他的相同名字文件,给搜索造成干扰。SI可以很方便的添加和去除包含的工程文件,Projectàadd and remove project files
如下图:
15.png
    现在开始添加代码,首先添加一个全局变量用来存收到的数据:
  1. uint8_t receive;
复制代码
    在uart.c中添加如下两段代码:
  1. #ifdef __GNUC__
  2. /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
  3.    set to 'Yes') calls __io_putchar() */
  4. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  5. #else
  6. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  7. #endif /* __GNUC__ */
复制代码
  1. PUTCHAR_PROTOTYPE
  2. {
  3.   /* Place your implementation of fputc here */
  4.   /* e.g. write a character to the USART3 and Loop until the end of transmission */
  5.   HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF);

  6.   return ch;
  7. }
复制代码
     然后添加主函数中断接收代码和一个printf发送:
  1. HAL_UART_Receive_IT(&huart3,(uint8_t *)&receive,1);
  2.   printf("hello");
复制代码
     在main.c主函数外添加一个中断接收回调函数:
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.   HAL_UART_Receive_IT(&huart3,(uint8_t *)&receive,1);
  4.    HAL_UART_Transmit(&huart3, (uint8_t *)&receive, 1, 0xFFFF);
  5. }
复制代码
     好啦,大功告成,现在烧录进去后首先会显示“hello”,然后输入什么就会输出什么。如下图:
16.png

评分

1

查看全部评分

QQ:252669569


回复

使用道具 举报

2863

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2017-1-2 12:09:06 | 显示全部楼层
能跟着做就好了


回复

使用道具 举报

1351

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2017-1-2 12:29:54 | 显示全部楼层
顶顶顶,mark~
HELLO_WATER


回复

使用道具 举报

103

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-9-17 15:32:19 | 显示全部楼层
必须顶      


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-4-21 04:05 , Processed in 0.143259 second(s), 19 queries , Redis On.

快速回复 返回顶部 返回列表