stm32

在linux上搭建stm32开发环境

寵の児 提交于 2020-02-01 03:00:56
环境:ubuntu18.04 1、官网下载编译链: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads 我下载的是gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2版本 wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2 2、解压编译链: tar xjf gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2 3、添加环境变量: sudo vim ~/.bashrc 在最后面添加行: export PATH = $PATH :/home/hpf/Compile_chain/gcc-arm-none-eabi-7-2018-q2-update/bin 或者不添加环境变量也行,只需要在编译时指定对应的编译链(位置)即可; 执行一下: source ~/.bashrc 4、工程编译(我的github工程): git

使用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

stm32学习笔记四

荒凉一梦 提交于 2020-01-31 11:51:41
按键控制 利用按键控制led,在笔记一的基础上添加按键控制。 步骤还是如常,建立key.h,key.c文件,并添加到工程中。 key.h内容 # ifndef KEY_H # include "sys.h" # define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) # define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) # define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) # define KEY3 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) # define KEY0_PRES 1 # define KEY1_PRES 2 # define KEY2_PRES 3 # define WKUP_PRES 4 void KEY_Init ( void ) ; //IO初始化 u8 KEY_Scan ( u8 ) ; //按键扫描函数 # endif key.c内容 # include "key.h" # include "delay.h" void KEY_Init ( void ) { GPIO_InitTypedef key ; RCC_AHB1PeriphClockCmd ( RCC

STM32的SPI问题。

做~自己de王妃 提交于 2020-01-31 09:25:56
问题描述 : 之前一直使用的单片机是LPC2109,对其SPI很熟悉。基本就是原本拿来稍作修改就用。 由于某种原因需要使用STM32,然后设备的驱动是之前写好的,只修改了一些硬件控制端口,由于硬件驱动使用到了SPI接口,而我是把SPI接口提供了出来,本来以为简单修改SPI配置到对应单片机就行了。简单看了STM3的SPI配置,轻车熟路改代码,瞬间体现了良好的接口有哈。 编译,生成目标文件,下载运行。 并没有出现预想的结果。由于之前的设备驱动是能用的,所以排除设备驱动问题。 开始以为是由于对STM32端口配置的不熟悉导致的、看手册,看别人代码,没发现问题。 debug........ 问题定在SPI代码上。查看配置,一样啊。郁闷!!! 把自己配置考到别人能用的代码中,可以使用。更加郁闷!!!! debug看寄存器。对比能运行代码寄存器状态。发现运行到一段代码的时候寄存器不同 SPI_CR 0x0043 SPI_CR 0x0002 看datasheet.OVR置位。问题应该就在这了。可是为什么呢?????? 搜此问题,此处出自 这里 溢出错误(OVR)  溢出错误表示连续传输多个数据时,后一个数据覆盖了前一个数据而产生的错误。  状态标志SPIF表示的是数据传输正在进行中,它对数据的传输有较大的影响。主器件的SPIF有效由数据寄存器的空标志SPTE=0产生

STM32专区目录

前提是你 提交于 2020-01-31 02:22:17
STM32专区目录 1、ESP8266-01S模块 未完待续!! 来源: CSDN 作者: 首富•拖拉斯基 链接: https://blog.csdn.net/weixin_45983581/article/details/104116437

How do I debug unexpected resets in a STM32 device?

戏子无情 提交于 2020-01-30 14:40:30
问题 I'm doing some development in C with a STM32F107 chip and, at some point, the device began to reset when I call a specific function. I don't have a debugger and my debugging is just plain text over a serial port. I've used some other microcontrollers in which I was able to access a register to see the cause of the reset, but I can't seem to find an equivalent for this device. I'm aware of the hardware exceptions of the Cortex-M3, but I don't know if one of them is being triggered since I can

How do I debug unexpected resets in a STM32 device?

时光毁灭记忆、已成空白 提交于 2020-01-30 14:40:08
问题 I'm doing some development in C with a STM32F107 chip and, at some point, the device began to reset when I call a specific function. I don't have a debugger and my debugging is just plain text over a serial port. I've used some other microcontrollers in which I was able to access a register to see the cause of the reset, but I can't seem to find an equivalent for this device. I'm aware of the hardware exceptions of the Cortex-M3, but I don't know if one of them is being triggered since I can

STM32 内存/ROM分配-启动-升级

南笙酒味 提交于 2020-01-30 10:26:43
STM32 之 RAM/ROM-启动-升级 一、 文章概述 STM32(包括其它所有单片机、ARM等),我们能看到的只是其中一部分运行代码,包括自行编写(x.c,x.h)、库(x.lib\x.a)、启动文件(startup_xxx.s)等。还有其它一些IDE环境自带的启动代码(如图一,可从MAP文件中查看到) 对于以上所有代码编译后的东西,再经过链接等步骤加工后,形成一种叫二进制可执行文件(x.bin)。bin文件按照对于的ROM地址烧写到芯片中,即可运行。 二、 ROM存储结构 对于STM32来说,BIN文件在ROM中的存储结构,则主要包括几大部分data段、bss段、heap段、stack段、code段、中断向量表段、复位启动入口(包括主堆栈指针初始值)等。 我们从头开始了解一下流程。 首先,便是这“复位启动入口”。这入口指明了两个人的身份-PC和SP。也就是这入口接下来得继续走下去的路。图二便是复位启动入口的代码。 由于STM32是小端的存储模式,所以“08 C3 00 20”便指明了主堆栈指针SP=0x2000C308,“A1 41 00 08”便指明了程序指针PC=0x080041a1。由图一MAP可看出,0x080041a1便是startup_xxx.s的入口。图三是由实际仿真窗口捕捉的代码,确实是startup_xxx.s文件的SystemInit()函数。

STM32 USB HID-Mouse 基本功能

折月煮酒 提交于 2020-01-30 09:28:57
一,前言 USB Device HID Mouse功能, 实现基本的单击,移动功能 目标平台: STM32F103ZET CubeMX版本: STM32CubeMX 5.5.0 CubeMX FW版本:STM32Cube_FW_F1_V1.8.0 二,硬件连接 如图,USB Device 很多硬件,包括官方的开发板上会有一个使能管脚,注意此管脚的选通。F1系列MCU的DP管脚内置上拉,因此外部直连即可。 三,代码配置 参考代码详见 : GitHub: HID_Mouse 时钟配置后,选择USB Device , 标准HID即可,然后直接生成代码,就可以直接使用。 生成的报文描述符如下: 设备为指针,指定按键占用3 Bit , X Y 的偏移量分别占用 8 Bit (有符号) 对应鼠标上报的HID消息格式如下 /* * buffer[0] | bit 0 - Left Button * | bit 1 - Right Button * buffer[1] | Cursor Movement X axis (Signed from -127 to 127) * buffer[2] | Cursor Movement Y axis (Signed from -127 to 127) * buffer[3] | Wheel Vertical Movement * Origin-------

STM32 GPIO常用库函数

空扰寡人 提交于 2020-01-30 07:21:03
库函数代码 头文件:stm32f10x_gpio.h 源文件:stm32f10x_gpio.c 使能函数 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE); 1个初始化函数: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); (1) 作用:初始化一个或者多个IO口(同一组)的工作方式和速度。 (2) 该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器 (3) GPIOx: GPIOA~GPIOG (4) GPIO_Init函数初始化样例: GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0–>PB.5 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5