stm32f407

STM32F407 跑马灯 库函数版 个人笔记

自作多情 提交于 2020-02-01 04:37:35
原理图: MCU在开发板原理图的第二页,LED在开发板原理图的第三页 由图可知,PF9 ,PF10 若输出低电平则灯亮,高电平则灯灭 选推挽输出 代码步骤 使能IO口时钟。 调用函数RCC_AHB1PeriphClockCmd();不同的外设调用的时钟使能函数可能不一样 初始化IO口模式。调用函数GPIO_Init(); 操作IO口,输出高低电平。 GPIO_SetBits(); GPIO_ResetBits(); 实现步骤 1.删掉FWLIB中不用的源文件(以提高编译速度),保留misc,rcc , gpio , uart 2.新建hardward文件夹,其中新建led文件夹,其中新建led.c 和led.h,分别引入工程 3.led.h中: #ifndef __LED_H #define __LED_H void LED_Init(void); #endif 4.led.c中,每个函数用gotodefinition查看定义 怎么写函数里的参数呢?找到assert_param 函数 assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph)); 其中最里层的括号里会出现参数,外面用一个宏包着 对包着参数的那个宏,(如下面的IS_RCC_AHB1_CLOCK_PERIPH)goto definition,可以看到其定义 1)如果直接是

使用STM32F407驱动鹰眼摄像头

风格不统一 提交于 2020-01-31 23:28:09
ctime:2018-07-06 13:14:33 +0800|1530854073 标签(空格分隔): 未分类 鹰眼摄像头一般用在智能车比赛上,因此现在网上大部分都是用K60来驱动。但K60没有像STM32的HAL、STD库那样的官方库,都是爱好者或者商家(野火、逐飞)等写的民间库,水平也参差不齐。而STM32不仅有官方库,还有STM32QubeMX这种方便的GUI来直接配置底层。 因此,在2018年的创意组上,我们决定使用STM32来驱动鹰眼,这样,以后在Robocon中也能用得上。 STM32F407实际上是有DCMI摄像头接口的,但由于鹰眼摄像头是硬件二值化过的输出,因此似乎不能用DCMI。(我没尝试,因为如果使用DCMI的话,就不能用中断+DMA的方式来驱动了,如果DCMI失败只能重新打板。) 保险起见我直接将鹰眼的D0-D7接到407的PD0-PD7上,然后场中断接PC9的外部中断,PCLK接PC8(TIM8的CH4)。 驱动方式与K60基本一样,即场中断来时,开启DMA传输,设置传输源地址为 &GPIOD->IDR ,传输目的地址为图像数组首地址,传输长度为数组的size。 这个DMA是TIM8 CH4的输入捕捉DMA,因此每次PCLK脉冲过来,都会触发一次。 需要注意的是,一开始我以为DMA传输从 GPIOD->IDR 到 img_buffer

STM32F407之DMA-笔记

放肆的年华 提交于 2020-01-05 09:02:49
学习要点记录,并不全面,祥参 参考手册RM0090 简介: DMA用于外设-内存,内存-内存之间数据的快速传输 DMA控制器由双AHB 主总线架构和独立的FIFO组成,以此来优化系统带宽 两个DMA控制器一共含有16个数据流,每个控制器含有8个数据流;每个数据流有8个通道,每个数据流有一个优先级仲裁器。 主要特征: 双AHB总线架构,一个负责内存访问,另一个负责外设访问 AHB从机编程接口只支持32位访问 每个数据流拥有4个独立的32位FIFO,直接模式和FIFO模式都可以使用 --FIFO模式下,可以通过软件设置FIFO阈值为1/4,1/2,3/4 --直接模式下,每个DMA请求立即触发一次数据传输。当处于直接模式,从内存向外设传输数据时,DMA只从内存预装载一个数据到FIFO --每个数据流可以通过软件配置为: -------常规通道,支持 外设-内存 ;内存-外设 ;内存-内存 。 -------双缓冲通道,支持内存双缓冲 --数据流之间的优先级可以通过软件设置为:非常高 ;高 ;中等 ;低 ;如果优先级相等,那么数据流编号越小,优先级越高 --只有DMA2的每个数据流支持软件触发的数据传输,而且只有传输方向为: 内存-内存 --每个数据流请求是8个通道中的一个。选择可以通过软件设置,而且允许一些外设来触发DMA请求 --传输的数据量可以通过DMA控制器管理,或者通过外设管理

[MicroPython]TPYBoard开发板STM32F407超声波测距

浪子不回头ぞ 提交于 2020-01-04 22:48:29
1.实验目的 1. 学习在PC机系统中扩展简单I/O 接口的方法。 2. 进一步学习编制数据输出程序的设计方法。 3. 学习超声波模块的测距原理。 4. 学习LCD5110接线方法 5. 学习 F407 Micropython开发板控制超声波模块测距。 2.所需元器件 超声波模块一个 F407 Micropython开发板一块 5110LCD显示屏一个 数据线一条 杜邦线若干 3.超声波模块工作原理 (1)采用IO口TRIG触发测距,给最少10us的高电平信呈。 (2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回。 (3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。 如下图接线,VCC 供 5V电源, GND 为地线,TRIG 触发控制信号输入,ECHO 回响信号输出等四个接口端。 4.控制5110显示屏显示6x8字符 先看一下LCD5110针脚含义吧(注意:LCD5110的针脚有些不一样的) F407 Micropython开发板的针脚与5110的针脚对应关系如下: F407 Micropython开发板 LCD5110 memo ---------------------------- # any Pin => RST Reset pin (0

STM32F407 上手-USART 收发数据

匿名 (未验证) 提交于 2019-12-03 00:21:02
研究了一下KEIL的MDK以及它的文档 总结一下,KEIL的入门要比arduino要复杂的多,arduino是为硬件小白及非专业人士准备的。但是它的功能并不弱。 KEIL入门 请一定要认真花点时间看一下它的文档 ,我是用这份文档入门的(http://www2.keil.com/docs/default-source/default-document-library/mdk5-getting-started.pdf?sfvrsn=0) 原以为找个hello world例子就可以轻松入门,后来发现错了。所以认认真真去看完了上面的文档。 不多说了,上面的文档很专业,看完就足够入门了。 我把例子放给大家,官方的例子在我的板子上运行有问题(只能发送一次),做了一些改动 #include "Driver_USART.h" extern ARM_DRIVER_USART Driver_USART2; /*---------------------------------------------------------------------------- * Application main thread *---------------------------------------------------------------------------*/ void myUART

基于stm32f407的无线视屏传输项目

允我心安 提交于 2019-12-01 07:06:18
材料:STM32F407两块 NRF24L01两个,OV2640摄像头一个,TFTLCD4.3寸显示屏一个, IS62WV51216(sram)一个 。 注:一开始在无线传输模块的选材上有串口wifiESP8266和NRF24L01两个,先选择了ESP8266进行测试,这个wifi模块传输距离,面对阻隔物体的传输比NRF24L01强,但是经过深入学习总结,这个模块传输速度很慢,因为限制在了串口的速率上,比如115200的波特率计算下来10kb/s左右的传输速率,而NRF24L01则是115kb/s的传输速率,所以最后放弃了ESP8266.局限于各方面因素只能选择NRF24L01,如果有后生的话,有能力的话,建议选择sdio接口的WIFI模块。这个模块是我在正点原子论坛上了解到的,速度很块。 上图: 视频链接: http://v.youku.com/v_show/id_XMjUxNzI0MDM3Mg==.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0 自己在这个项目中的思路: 1.先将摄像头数据过去回来打印出来,在遮挡摄像头等变化的时候看某一个位置点的数据是否有变化。 2.将获取回来的摄像头数据按照lcd屏的写入数据方式写进去,调试图像和摄像头配置 3.将NRF24L01通信的8位数据传输方式改为16位数据传输方式

STM32F407外部晶体改为25M后检测不到芯片的解决办法

自闭症网瘾萝莉.ら 提交于 2019-11-28 12:47:26
问题描述 分享一个之前遇到的STM32F4晶体频率问题,导致单片机死机的解决办法。使用一款新的F4开发板,直接使用的正点原子STM32F407工程模板代码,管脚配置正确,下载到外部晶体为25MHz的开发板之后,LED不闪烁,串口无输出,单片机直接死机,调试器检测不到芯片。 问题分析 之前写过一篇文章: STM32串口打印输出乱码的解决办法 ,那个F103乱码是因为外部晶体频率12M,而程序中8M对应不上,导致的串口乱码和定时器定时不准确,但是单片机并没有死机,程序还可以正常下载,解决办法也很简单,只需要修改程序中的外部高速时钟频率(HSE_VALUE)和倍频系数(RCC_CFGR_PLLMULL6)即可,而现在F407的这个情况貌似和之前F103的那个问题一样,也是晶体频率配置的问题,但是这个是直接死机了,单片机并没有工作。现在的开发板晶体频率是25M,而正点原子开发板的晶体频率是8M,应该就是这个问题导致的。在《正点原子F407开发指南》中新建工程模板章节,官方固件库中默认的晶体频率是25MHz,为了适配板子的8M晶体,修改了如下两个参数: stm32f4xx.h文件 if !defined (HSE_VALUE) define HSE_VALUE ((uint32_t)8000000) / !< Value of the External oscillator in Hz /