[BSP] Replace 'BSP/<board>' folders by submodules

This commit is contained in:
Ali Labbene 2024-01-15 16:09:37 +01:00
parent 7dee42354d
commit b2f3c387ff
35 changed files with 10 additions and 11724 deletions

8
.gitmodules vendored
View File

@ -6,3 +6,11 @@
path = Drivers/CMSIS/Device/ST/STM32F2xx
url = https://github.com/STMicroelectronics/cmsis_device_f2.git
branch = master
[submodule "Drivers/BSP/STM32F2xx_Nucleo_144"]
path = Drivers/BSP/STM32F2xx_Nucleo_144
url = https://github.com/STMicroelectronics/stm32f2xx-nucleo-144-bsp.git
branch = main
[submodule "Drivers/BSP/STM322xG_EVAL"]
path = Drivers/BSP/STM322xG_EVAL
url = https://github.com/STMicroelectronics/stm322xg-eval-bsp.git
branch = main

@ -0,0 +1 @@
Subproject commit ee9ca2e0219a1c9b480e526c3bb6781d287f5e60

View File

@ -1,27 +0,0 @@
Copyright 2017 STMicroelectronics.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,41 +0,0 @@
# BSP STM322xG_EVAL Component
![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm322xg-eval.svg?color=brightgreen)
## Overview
**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost.
**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series.
* The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product.
* The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio.
* The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series.
* A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library...
* A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series.
Two models of publication are proposed for the STM32Cube embedded software:
* The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series).
* The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions.
## Description
This **stm322xg-eval** MCU component repository is one element of the **STM32CubeF2** MCU embedded software package, providing the **STM322xG_EVAL** BSP BOARD component part.
## Release note
Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm322xg-eval/blob/main/Release_Notes.html).
## Compatibility information
Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF2/blob/master/Release_Notes.html) release note.
* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common)
* [stm32-cs43l22](https://github.com/STMicroelectronics/stm32-cs43l22)
* [stm32-ili9320](https://github.com/STMicroelectronics/stm32-ili9320)
* [stm32-ili9325](https://github.com/STMicroelectronics/stm32-ili9325)
* [stm32-ov2640](https://github.com/STMicroelectronics/stm32-ov2640)
* [stm32-stmpe811](https://github.com/STMicroelectronics/stm32-stmpe811)
## Troubleshooting
Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide.

View File

@ -1,636 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Release Notes for STM322xG_EVAL Evaluation Board Drivers</title>
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<link rel="stylesheet" href="_htmresc/mini-st_2020.css" />
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
<link rel="icon" type="image/x-icon" href="_htmresc/favicon.png" />
</head>
<body>
<div class="row">
<div class="col-sm-12 col-lg-4">
<center>
<h1 id="release-notes-for-stm322xg_eval-evaluation-board-drivers"><small>Release Notes for</small> <mark>STM322xG_EVAL Evaluation Board Drivers</mark></h1>
<p>Copyright © 2016 STMicroelectronics<br />
</p>
<a href="https://www.st.com" class="logo"><img src="_htmresc/st_logo_2020.png" alt="ST logo" /></a>
</center>
<h1 id="purpose">Purpose</h1>
<p>This directory contains the board drivers to demonstrate the capabilities of the STM322xG Evaluation Kit.</p>
</div>
<div class="col-sm-12 col-lg-8">
<h1 id="update-history">Update History</h1>
<div class="collapse">
<input type="checkbox" id="collapse-section23" checked aria-hidden="true"> <label for="collapse-section23" aria-hidden="true">V7.0.2 / 07-April-2023</label>
<div>
<h2 id="main-changes">Main Changes</h2>
<ul>
<li>All source files: update disclaimer to add reference to the new license agreement.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section22" aria-hidden="true"> <label for="collapse-section22" aria-hidden="true">V7.0.1 / 29-September-2017</label>
<div>
<h2 id="main-changes-1">Main Changes</h2>
<ul>
<li>Remove DATE and VERSION from header files</li>
<li>stm322xg_eval.c:
<ul>
<li>Implement I2C workaround to avoid misbehavior when pushing the reset button repetitively with LCD paint application</li>
</ul></li>
<li>stm322xg_eval_lcd.c:
<ul>
<li>Fix LCD compilation errors with SW4STM32 toolchain</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section21" aria-hidden="true"> <label for="collapse-section21" aria-hidden="true">V7.0.0 / 17-March-2017</label>
<div>
<h2 id="main-changes-2">Main Changes</h2>
<ul>
<li>stm322xg_eval_sd.c/.h:
<ul>
<li>Update BSP SD APIs following new HAL SD drivers implementation</li>
<li>Fix BlockSize to 512 bytes</li>
</ul></li>
<li>stm322xg_eval_audio.c/.h:
<ul>
<li>Add BSP_AUDIO_OUT_MspInit, BSP_AUDIO_OUT_MspDeInit and BSP_AUDIO_OUT_ClockConfig APIs as weak</li>
<li>Remove CODEC_Reset API</li>
</ul></li>
<li>stm322xg_eval_sram.c/.h:
<ul>
<li>Add BSP_SRAM_MspInit API as weak</li>
</ul></li>
<li>stm322xg_eval_camera.c/.h:
<ul>
<li>Add BSP_CAMERA_MspInit API as weak</li>
</ul></li>
<li>Notes:
<ul>
<li>These BSP drivers break the compatibility with previous versions.</li>
<li>If FatFs is required, “FatFS R0.11 ST modified 20161223” must be used with this version of BSP drivers.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section20" aria-hidden="true"> <label for="collapse-section20" aria-hidden="true">V6.2.1 / 01-July-2016</label>
<div>
<h2 id="main-changes-3">Main Changes</h2>
<ul>
<li>stm322xg_eval_camera.c update BSP Camera driver to use the new HAL DCMI APIs:
<ul>
<li>Update BSP_CAMERA_Suspend() API to call HAL_DCMI_Suspend() API</li>
<li>Update BSP_CAMERA_Resume to call HAL_DCMI_Resume() API</li>
</ul></li>
<li>NVIC priorioty set to the lowest priority 0x0F</li>
<li>Fix SRAM timing values</li>
<li>Support of Potentiometer mounted on eval board
<ul>
<li>Add new API to initialize required peripherals (ADC, clock …)</li>
<li>Add new API to get voltage level</li>
</ul></li>
<li>Update overall drivers by removing BSP_PPP_IRQHandler, BSP_PPP_DMA_TX_IRQHandler and BSP_PPP_DMA_RX_IRQHandler to avoid possible conflict when the same Handler is used by different IPs. These Handlers should be defined by user at application level, inducing a break of compatbility versus V6.2.0 of the STM322xG-EVAL BSP drivers</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section19" aria-hidden="true"> <label for="collapse-section19" aria-hidden="true">V6.2.0 / 05-January-2016</label>
<div>
<h2 id="main-changes-4">Main Changes</h2>
<ul>
<li>stm322xg_eval.c/.h
<ul>
<li>Update to support the new LCD components (ili9325 V1.2.2 and ili9325 V1.2.2) version
<ul>
<li>Add new API: LCD_IO_WriteMultipleData()</li>
<li>Update LCD_IO_ReadData() API prototype: add “RegValue” parameter</li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section18" aria-hidden="true"> <label for="collapse-section18" aria-hidden="true">V6.1.2 / 09-Octobre-2015</label>
<div>
<h2 id="main-changes-5">Main Changes</h2>
<ul>
<li>stm322xg_eval.c/.h
<ul>
<li>Change I2C_SPEED used define by BSP_I2C_SPEED</li>
<li>Add Audio_IO_DeInit() to support cs43l22 component V2.0.0</li>
</ul></li>
<li>stm322g_eval_eeprom.c/.h
<ul>
<li>Change BSP_EEPROM_WaitEepromStandbyState() and BSP_EEPROM_WritePage() to be declared as static APIs</li>
</ul></li>
<li>Align to STM32F2xx HAL V1.2.0 for __HAL_RCC_PPP_CLK_ENABLE()</li>
<li>Miscellaneous comments update</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section17" aria-hidden="true"> <label for="collapse-section17" aria-hidden="true">V6.1.1 / 30-December-2014</label>
<div>
<h2 id="main-changes-6">Main Changes</h2>
<ul>
<li>stm322xg_eval_camera.h, stm322xg_eval_audio.h, stm322xg_eval_io.h, stm322xg_eval_ts.h and stm322xg_eval_lcd.c/.h
<ul>
<li>Change “" by”/" in the include path to fix compilation issue under Linux</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section16" aria-hidden="true"> <label for="collapse-section16" aria-hidden="true">V6.1.0 / 13-March-2014</label>
<div>
<h2 id="main-changes-7">Main Changes</h2>
<ul>
<li>stm322xg_eval_lcd.c/.h
<ul>
<li>Integration of the LCD ili9320</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section15" aria-hidden="true"> <label for="collapse-section15" aria-hidden="true">V6.0.0 / 07-March-2014</label>
<div>
<h2 id="main-changes-8">Main Changes</h2>
<ul>
<li>This STM322xG_EVAL BSP is intended to be delivered with the STM32F2Cube FW package V1.0.0.
<ul>
<li>It is also aligned and consistent with the STM32F4Cube FW package V1.1.0</li>
</ul></li>
<li>The following components have been integrated in this delivery
<ul>
<li>LCD : ili9325 (the ili9320 should be supported in a next release)</li>
<li>Camera : ov2640</li>
<li>Audio Codec : cs43L22</li>
<li>IO Expander : stmpe811 (required also for the Touch Screen function)</li>
<li>External SRAM : IS61WV1024</li>
</ul></li>
<li>The overal content of the BSP is decribed below:</li>
<li>stm322xg_eval_sd.c/.h</li>
<li>Update SD_DATATIMEOUT value</li>
<li>stm322xg_eval_eeprom.c/.h
<ul>
<li>Update usage of BSP_EEPROM_TIMEOUT_UserCallback() function</li>
</ul></li>
<li>Alignment to the coding rules and architecture of the BSP FW F4 v1.0.0
<ul>
<li>All external functions include a prefix BSP_</li>
</ul></li>
<li>stm322xg_eval_camera.c/.h: driver functions for Camera module mounted on STM322xG-EVAL evaluation board
<ul>
<li>The OV2640 component must be included</li>
<li>BSP_CAMERA_Init()</li>
<li>BSP_CAMERA_ContinuousStart()</li>
<li>BSP_CAMERA_SnapshotStart()</li>
<li>BSP_CAMERA_Suspend()</li>
<li>BSP_CAMERA_Resume()</li>
</ul></li>
<li>stm322xg_eval_audio.c/.h: This file provides the Audio driver for the STM322xG-EVAL evaluation board
<ul>
<li>The CS43L22 Audio Codec component must be used</li>
<li>BSP_AUDIO_OUT_Init()</li>
<li>BSP_AUDIO_OUT_Play()</li>
<li>BSP_AUDIO_OUT_Pause()</li>
<li>BSP_AUDIO_OUT_Resume()</li>
<li>BSP_AUDIO_OUT_Stop()</li>
<li>BSP_AUDIO_OUT_SetVolume()</li>
<li>BSP_AUIO_OUT_SetMute()</li>
<li>BSP_AUDIO_OUT_SetOutputMode()</li>
</ul></li>
<li>stm322xg_eval_sram.c/.h: This file includes the SRAM driver for the IS61WV102416BLL memory device mounted on STM322xG-EVAL evaluation board
<ul>
<li>The IS61WV102416BLL memory device must be used</li>
<li>BSP_SRAM_Init()</li>
<li>BSP_SRAM_ReadData()</li>
<li>BSP_SRAM_ReadData_DMA()</li>
<li>BSP_SRAM_WriteData()</li>
<li>BSP_SRAM_WriteData_DMA()</li>
</ul></li>
<li>stm322xg_eval_ioc.c/.h : This file provides a set of functions needed to manage the IO pins This file provides a set of functions needed to manage the IO pins
<ul>
<li>The STMPE811 IO expander device component driver must be included</li>
<li>BSP_IO_Init()</li>
<li>BSP_IO_ConfigPin()</li>
<li>BSP_IO_WritePin()</li>
<li>BSP_IO_ReadPin()</li>
<li>BSP_IO_TogglePin()</li>
</ul></li>
<li>stm322xg_eval_lcd.c/.h : This file includes the driver for Liquid Crystal Display (LCD) module mounted on STM322xG-EVAL evaluation board.
<ul>
<li>The ILI9325 component driver MUST be included with this driver</li>
<li>Please refer to the file stm322xg_eval_lcd.h file to get the overall list of functions proposed by this driver</li>
</ul></li>
<li>stm322xg_eval_sd.c/.h : This file includes the uSD card driver mounted on STM322xG-EVAL evaluation board
<ul>
<li>This driver does not need a specific component driver for the micro SD device</li>
<li>BSP_SD_Init()</li>
<li>BSP_SD_ITConfig()</li>
<li>BSP_SD_IsDetected()</li>
<li>BSP_SD_ReadBlocks()</li>
<li>BSP_SD_WriteBlocks()</li>
<li>BSP_SD_ReadBlocks_DMA()</li>
<li>BSP_SD_WriteBlocks_DMA()</li>
<li>BSP_SD_Erase()</li>
</ul></li>
<li>stm322xg_eval_ts.c/.h : This file provides a set of functions needed to manage the touch screen on STM324x9I-EVAL evaluation board
<ul>
<li>The STMPE811 IO expander component must be used</li>
<li>BSP_TS_Init()</li>
<li>BSP_TS_ITConfig()</li>
<li>BSP_TS_ITGetState()</li>
<li>BSP_TS_ITGetStatus()</li>
<li>BSP_TS_ITClear()</li>
</ul></li>
<li>stm322xg_eval.c/.h : new functions provided
<ul>
<li>Joystick management</li>
<li>FSMC Bank3 management</li>
<li>IO Expander IO functions</li>
<li>LCD IO functions</li>
<li>AUDIO IO functions</li>
<li>CAMERA IO functions</li>
<li>I2C functions</li>
<li>EEPROM functions</li>
</ul></li>
<li>IMPORTANT NOTE: this version has to be used only with STM32CubeF2 based development</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section14" aria-hidden="true"> <label for="collapse-section14" aria-hidden="true">V5.1.1 / 11-January-2013</label>
<div>
<h2 id="main-changes-9">Main Changes</h2>
<ul>
<li>stm322xg_eval_ioe.c
<ul>
<li>Update the MEMS pins configuration in IOE_Config() function.</li>
<li>Update I2C communication sequence in I2C_ReadDataBuffer() function to ensure efficient and robust I2C transfer.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section13" aria-hidden="true"> <label for="collapse-section13" aria-hidden="true">V5.1.0 / 21-December-2012</label>
<div>
<h2 id="main-changes-10">Main Changes</h2>
<ul>
<li>stm322xg_eval_sdio_sd.h/.c
<ul>
<li>Support SDHC memory cards with capacity greater than 4 GB</li>
<li>Transmit and receive functions: swap the order of state machine and DMA configuration, to fix marginal limitation where the card sent data to the SDIO interface while the DMA is not ready to transfer them</li>
<li>Support SDHS (High Speed) memory cards, add new function SD_HighSpeed()</li>
</ul></li>
<li>stm322xg_eval_ioe.c
<ul>
<li>Configuration clean up and corrections</li>
<li>Touch screen (TSC) Interrupt mode enhancement</li>
<li>Update Read/Write low layer functions to ensure efficient and robust I2C transfer
<ul>
<li>Update legacy functions I2C_WriteDeviceRegister(), I2C_ReadDeviceRegister() and I2C_ReadDataBuffer() to use polling mode instead of DMA</li>
<li>Add three new functions I2C_DMA_WriteDeviceRegister(), I2C_DMA_ReadDeviceRegister() and I2C_DMA_ReadDataBuffer(), for DMA based I2C transfer</li>
</ul></li>
</ul></li>
<li>stm322xg_eval.c
<ul>
<li>SD_LowLevel_Init(): Set the GPIO clock to 50MHz to support High Speed mode</li>
</ul></li>
<li>stm322xg_eval_i2c_ee.c
<ul>
<li>Enable I2C DMA request only after the enable of the DMA stream, to avoid DMA FIFO error generation</li>
</ul></li>
<li>stm322xg_eval_fsmc_sram.c
<ul>
<li>Change memory type to SRAM instead of PSRAM (PSRAM is available only on STM322xG-EVAL RevA) and update timing values</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section12" aria-hidden="true"> <label for="collapse-section12" aria-hidden="true">V5.0.3 / 05-March-2012</label>
<div>
<h2 id="main-changes-11">Main Changes</h2>
<ul>
<li>All source files: license disclaimer text update and add link to the License file on ST Internet.</li>
<li>stm322xg_eval_lcd.c
<ul>
<li>Enhance Gamma Curve settings for ILI9320 controller</li>
</ul></li>
<li>stm322xg_eval.c and stm322xg_eval_ioe.c
<ul>
<li>Swap the order of I2C IOs and alternate function (AF) configuration: AF configuration should be done before to configure the IOs.</li>
</ul></li>
<li>stm322xg_eval_sdio_sd.c
<ul>
<li>In SD_WaitWriteOperation() and SD_WaitReadOperation() functions: reset StopCondition flag after sending CMD12</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section11" aria-hidden="true"> <label for="collapse-section11" aria-hidden="true">V5.0.2 / 28-December-2011</label>
<div>
<h2 id="main-changes-12">Main Changes</h2>
<ul>
<li>All source files: update disclaimer to add reference to the new license agreement</li>
<li>stm322xg_eval_lcd.c
<ul>
<li>Remove “static” from TextColor and BackColor variables declaration (need to be changed from other application modules)</li>
</ul></li>
<li>stm322xg_eval_ioe.h
<ul>
<li>Add conditional compilation on the default DMA stream(s) used for I2C1 Tx and Rx transfers, to allow user to change them from application level.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section10" aria-hidden="true"> <label for="collapse-section10" aria-hidden="true">V5.0.1 / 14-November-2011</label>
<div>
<h2 id="main-changes-13">Main Changes</h2>
<ul>
<li>stm322xg_eval_sdio_sd.h
<ul>
<li>SD_CardInfo structure, define CardCapacity variable as 64-bit long (instead of 32-bit) to support SDHC memory cards with capacity greater than 4 GB.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section9" aria-hidden="true"> <label for="collapse-section9" aria-hidden="true">V5.0.0 / 07-Octobre-2011</label>
<div>
<h2 id="main-changes-14">Main Changes</h2>
<ul>
<li>Update STM32 Evaluation Board Drivers architecture and folder organization, full API compatibility maintained vs. V4.6.2
<ul>
<li>All the HW drivers required for each board are provided within this board folder. The concerned drivers are:
<ul>
<li>stm32_eval_i2c_ee.c.h: I2C M24Cxx EEPROM memory driver</li>
<li>stm32_eval_i2c_tsensor.c.h: I2C LM75 temperature sensor driver</li>
<li>stm32_eval_spi_flash.c.h: SPI M25Pxxx FLASH memory driver</li>
<li>stm32_eval_sdio_sd.c.h: SDIO SD Card memory driver</li>
<li>stm32_eval_spi_sd.c.h: SPI SD Card memory driver</li>
<li>These drivers were moved from to 32XXX_EVAL folder(s)</li>
</ul></li>
<li>Common folder contains only drivers for the fonts and log module used by the LCD driver</li>
<li>stm32_eval.c/.h files removed, as consequence you need to perform the following update on your project configuration (based on EVAL drivers V4.6.2):
<ul>
<li>In the project files, add your EVAL board driver source file “stm322xg_eval.c” instead of “stm32_eval.c”</li>
<li>Include your EVAL board driver header file #include “stm322xg_eval.h” instead of #include “stm32_eval.h”</li>
<li>If you are using the EVAL boards LCD, you need to add the include of the LCD header file #include “stm322xg_eval_lcd.h”
<ul>
<li>If you are using the LCD log module, after copying it to the application folder you have to edit it and update the name of the LCD header file. For more details, refer to the lcd_log_conf_template.h driver description.</li>
</ul></li>
</ul></li>
<li>stm322xg_eval.h/.c
<ul>
<li>change value of “SDIO_TRANSFER_CLK_DIV” define from 2 to 0 to achieve SD max frequency at 24MHz.</li>
<li>Remove SD_DMAEndOfTransferStatus() function as now the DMA transfer is tracked using DMA End of transfer interrupt.</li>
<li>Add new define for the SDIOs DMA2 Stream (3 or 6): SD_SDIO_DMA_IRQn and SD_SDIO_DMA_IRQHANDLER.</li>
</ul></li>
<li>stm322xg_eval_sdio_sd.h/.c
<ul>
<li>Add new function SD_ProcessDMAIRQ() to be called from the DMA end of transfer interrupt.</li>
<li>Add some improvements by handling SDIO errors and adding timeout for different loops.</li>
<li>Refer to the driver header files comments for more information on how to use the provided API.</li>
</ul></li>
<li>stm322xg_eval_fsmc_sram.c
<ul>
<li>Add IOs config of missing FSMC address lines (FSMC_A21, FSMC_A22 and FSMC_A23).</li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section8" aria-hidden="true"> <label for="collapse-section8" aria-hidden="true">V4.6.2 / 22-July-2011</label>
<div>
<h2 id="main-changes-15">Main Changes</h2>
<ul>
<li>STM3210C_EVAL
<ul>
<li>stm3210c_eval_lcd.c: update to support new LCD AM240320D5TOQW01H (controller ILI9325)</li>
</ul></li>
<li>STM322xG-EVAL
<ul>
<li>stm322xg_eval.h: fix value of the SDIO clock divider (SDIO_TRANSFER_CLK_DIV constant) to 2 instead of 0</li>
<li>stm322xg_eval_lcd.c: increase FSMC AddressSetupTime value from 1 to 3 to be compliant with some LCD access timing</li>
<li>stm322xg_eval_audio_codec.c: update Codec_CtrlInterface_Init() and Codec_GPIO_Init() functions to not reconfigure the I2C peripheral if its already enabled and configured (to avoid configuring the I2C twice when using both Audio codec and IO Expander drivers in the same application).</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section7" aria-hidden="true"> <label for="collapse-section7" aria-hidden="true">V4.6.1 / 18-April-2011</label>
<div>
<h2 id="main-changes-16">Main Changes</h2>
<ul>
<li>Update some STM322xG_EVAL drivers (no change on the API) to fix warnings with TASKING C compiler.</li>
<li>Change the Release Notes name to STM32 Evaluation Board Drivers</li>
<li>stm322xg_eval.c
<ul>
<li>SD_LowLevel_Init(): change SDIO pins speed configuration to “GPIO_Speed_25MHz”</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section6" aria-hidden="true"> <label for="collapse-section6" aria-hidden="true">V4.6.0 / 11-March-2011</label>
<div>
<h2 id="main-changes-17">Main Changes</h2>
<ul>
<li>Official version supporting STM322xG_EVAL evaluation board RevB (for STM32F2xx devices).</li>
<li>Common
<ul>
<li>Add new LCD log utility drivers: The LCD Log module allows to automatically set a header and footer on any application using the LCD display and allows to dump user, debug and error messages by using the following macros: LCD_ErrLog(), LCD_UsrLog() and LCD_DbgLog().</li>
</ul></li>
<li>Note: the STM322xG_EVAL board RevA was wrongly named STM3220F_EVAL</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section5" aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V4.5.0 / 07-March-2011</label>
<div>
<h2 id="main-changes-18">Main Changes</h2>
<ul>
<li>stm32_eval_sdio_sd.c.h: driver improvement
<ul>
<li>SD Clock increased to 24MHz to improve the data transfer performance.</li>
<li>Add new functions to check the SDIO peripheral and SD Card status at any time: SD_WaitReadOperation(), SD_WaitWriteOperation(). The software sequence is little bit changed but without any impact on driver API. For more details, refer to the stm32_eval_sdio_sd.c driver description.</li>
<li>Add new structure containing the SD Status register parameters. This structure is called by the SD_SendSDStatus() function.</li>
<li>Transfers mode updated
<ul>
<li>Read/Write Block using Polling and DMA modes</li>
<li>Read/Write Multi Blocks using DMA mode only</li>
<li>Interrupt mode removed</li>
</ul></li>
<li>Data transfer functions are managing only fixed Block size (512-byte)</li>
</ul></li>
<li>STM32100B-EVAL
<ul>
<li>stm32100b_eval_cec.c: fix some strict ANSI-C errors</li>
</ul></li>
<li>STM32100E-EVAL
<ul>
<li>stm32100e_eval_cec.c: fix some strict ANSI-C errors</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V4.4.0 / 31-December-2010</label>
<div>
<h2 id="main-changes-19">Main Changes</h2>
<ul>
<li>Add new directory for STM32L152-EVAL board containing the following files:
<ul>
<li>stm32l152_eval.h/.c, stm32l152_eval_lcd.h/.c, stm32l152_eval_glass_lcd.h/.c, stm32l152_eval_i2c_ee.h/.c</li>
</ul></li>
<li>Add support for the STM32100E-EVAL Rev B: SPI FLASH CS pin “sFLASH_CS_PIN” changed from PB.02 to PE.06.</li>
<li>stm32100e_eval_lcd.h/.c: Add support for “LCD_ILI9325” LCD controller.</li>
<li>stm32100e_eval_fsmc_onenand.h/.c driver updated to correct asynchronous and synchronous read operations procedures.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true">V4.3.0 / 15-October-2010</label>
<div>
<h2 id="general">General</h2>
<ul>
<li>I2C EEPROM, Temperature Sensor and IOE Expander drivers updated to use the DMA for read/write transfer and add more robustness</li>
<li>SD Card (SDIO) driver updated to add more robustness</li>
<li>SPI Flash and SD Card (SPI) drivers: SPI MISO pin configuration changed to Input Floating</li>
</ul>
<h2 id="utilities">Utilities</h2>
<ul>
<li>Add new directory for STM32100E-EVAL board containing the following files:
<ul>
<li>stm32100e_eval.h/.c, stm32100e_eval_lcd.h/.c, stm32100e_eval_cec.h/.c, stm32100e_eval_fsmc_onenand.h/.c, stm32100e_eval_fsmc_sram.h/.c, stm32100e_eval_ioe.h/.c</li>
</ul></li>
<li>Common
<ul>
<li>stm32_eval_sdio_sd.c: Update the DMA End of Transfer Check loop inside the SD_ReadBlock(), SD_WriteBlock(), SD_ReadMultiBlocks() and SD_Write MultiBlocks().</li>
<li>stm32_eval_i2c_ee.c/.h
<ul>
<li>Enhanced sEE_WaitEepromStandbyState() function for more robustness.</li>
<li>Enhanced Read and Write operations to manage I2C limitations.</li>
<li>Add Timeout management with user callback implementation which allows recovering from I2C bus errors.</li>
<li>Add critical sections user callbacks allowing to disable then enable interrupts when I2C operation require to be not interrupted.</li>
</ul></li>
<li>stm32_eval_i2c_tsensor.c/.h
<ul>
<li>Enhanced I2C communication functions by using DMA for registers Read and Write operations.</li>
<li>Add Timeout management with user callback implementation which allows recovering from I2C bus errors.</li>
</ul></li>
</ul></li>
<li>STM32100B_EVAL
<ul>
<li>stm32100b_eval.h: Add LM75 DMA defines.</li>
<li>stm32100b_eval_lcd.c: Change “SPI_FLASH” by “sFLASH” in LCD_DrawBMP() function.</li>
</ul></li>
<li>STM3210B_EVAL
<ul>
<li>stm3210b_eval.h: Add LM75 DMA defines.</li>
<li>stm3210b_eval_lcd.c: Change “SPI_FLASH” by “sFLASH” in LCD_DrawBMP() function.</li>
</ul></li>
<li>STM3210C_EVAL
<ul>
<li>stm3210c_eval.h: Add EEPROM driver Timeout define.</li>
<li>stm3210c_eval_lcd.c: Change “SPI_FLASH” by “sFLASH” in LCD_DrawBMP() function.</li>
<li>stm3210c_eval_i2c_ioe.c
<ul>
<li>Enhanced I2C communication functions by using DMA for registers Read and Write operations.</li>
<li>Add Timeout management with user callback implementation which allows recovering from I2C bus errors.</li>
<li>change IOE_I2C_SPEED from “400000” to “300000”.</li>
</ul></li>
</ul></li>
<li>STM3210E_EVAL
<ul>
<li>stm3210e_eval.c: change “void SD_WaitForDMAEndOfTransfer(void)” to “uint32_t SD_DMAEndOfTransferStatus(void)”.</li>
<li>stm3210e_eval.h: Add LM75 DMA defines.</li>
<li>stm3210e_eval_fsmc_nand.h: remove “NAND_CMD_AREA_TRUE1” define.</li>
<li>stm3210e_eval_fsmc_nand.c: Update FSMC timing in NAND_Init() function to be aligned with AN2784 application note.</li>
<li>stm3210e_eval_fsmc_nor.c
<ul>
<li>NOR_Init() function: add FSMC_AsynchronousWait field to FSMC_NORSRAMInitStructure</li>
</ul></li>
<li>stm3210e_eval_fsmc_sram.c
<ul>
<li>Update FSMC timing in SRAM_Init() function to be aligned with AN2784 application note.</li>
<li>SRAM_Init() function: add FSMC_AsynchronousWait field to FSMC_NORSRAMInitStructure</li>
</ul></li>
<li>stm3210e_eval_lcd.c
<ul>
<li>LCD_FSMCConfig() function: add FSMC_AsynchronousWait field to FSMC_NORSRAMInitStructure</li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V4.2.0 / 16-April-2010</label>
<div>
<h2 id="general-1">General</h2>
<ul>
<li>I2C EEPROM driver update to use the DMA to perform data transfer to/from EEPROM memory.</li>
</ul>
<h2 id="utilities-1">Utilities</h2>
<ul>
<li>STM32_EVAL
<ul>
<li>stm32_eval_i2c_ee.c: updated to use the DMA to perform data transfer to/from EEPROM memory. For more details, refer to the description provided within this file.</li>
<li>stm3210c_eval.c: add low level functions to configure the DMA (needed for I2C EEPROM driver)</li>
<li>stm3210c_eval_ioe.c: add a delay in IOE_TS_GetState() function to wait till the end of ADC conversion</li>
<li>stm3210e_eval_fsmc_nor.c: add PD6 pin configuration in NOR_Init() function</li>
<li>stm3210b_eval_lcd.c: remove the second “;” from “static void PutPixel(int16_t x, int16_t y);;”</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V4.1.0 / 03-January-2010</label>
<div>
<h2 id="general-2">General</h2>
<ul>
<li>Add support for STM32 Low-density Value line (STM32F100x4/6) and Medium-density Value line (STM32F100x8/B) devices.</li>
<li>Add support for the STMicroelectronics STM32100B-EVAL evaluation board.</li>
</ul>
<h2 id="utilities-2">Utilities</h2>
<ul>
<li>STM32_EVAL
<ul>
<li>Add new directory “Common” containing a common drivers for all STM32 evaluation boards: fonts.h/.c, stm32_eval_i2c_ee.h/.c, stm32_eval_spi_flash.h/.c, stm32_eval_i2c_tsensor.h/.c, stm32_eval_spi_sd.h/.c and stm32_eval_sdio_sd.h/.c</li>
<li>Add new driver for the STM32100B-EVAL managing Leds, push button and COM ports.</li>
<li>New HDMI CEC High level driver.</li>
<li>For all LCD drivers new fonts has been added.</li>
<li>New FSMC memories drivers for STM3210E-EVAL board: stm3210e_eval_fsmc_sram.h/.c, stm3210e_eval_fsmc_nor.h/.c and stm3210e_eval_fsmc_nand.h/.c.</li>
</ul></li>
</ul>
</div>
</div>
</div>
</div>
<footer class="sticky">
For complete documentation on <mark>STM32 Microcontrollers</mark> , visit: <a href="http://www.st.com/STM32">http://www.st.com/STM32</a>
</footer>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,348 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval.h
* @author MCD Application Team
* @brief This file contains definitions for STM322xG_EVAL's LEDs,
* push-buttons and COM ports hardware resources.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM322xG_EVAL_H
#define __STM322xG_EVAL_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f2xx_hal.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @addtogroup STM322xG_EVAL_LOW_LEVEL
* @{
*/
/** @defgroup STM322xG_EVAL_LOW_LEVEL_Exported_Types STM322xG EVAL LOW LEVEL Exported Types
* @{
*/
typedef enum
{
LED1 = 0,
LED2 = 1,
LED3 = 2,
LED4 = 3
}Led_TypeDef;
typedef enum
{
BUTTON_WAKEUP = 0,
BUTTON_TAMPER = 1,
BUTTON_KEY = 2,
BUTTON_RIGHT = 3,
BUTTON_LEFT = 4,
BUTTON_UP = 5,
BUTTON_DOWN = 6,
BUTTON_SEL = 7
}Button_TypeDef;
typedef enum
{
BUTTON_MODE_GPIO = 0,
BUTTON_MODE_EXTI = 1
}ButtonMode_TypeDef;
typedef enum
{
JOY_MODE_GPIO = 0,
JOY_MODE_EXTI = 1
}JOYMode_TypeDef;
typedef enum
{
JOY_NONE = 0,
JOY_SEL = 1,
JOY_DOWN = 2,
JOY_LEFT = 3,
JOY_RIGHT = 4,
JOY_UP = 5
}JOYState_TypeDef;
typedef enum
{
COM1 = 0,
COM2 = 1
}COM_TypeDef;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_LOW_LEVEL_Exported_Constants STM322xG EVAL LOW LEVEL Exported Constants
* @{
*/
/**
* @brief Define for STM322xG_EVAL board
*/
#if !defined (USE_STM322xG_EVAL)
#define USE_STM322xG_EVAL
#endif
/** @addtogroup STM322xG_EVAL_LOW_LEVEL_LED STM322xG EVAL LOW LEVEL LED
* @{
*/
#define LEDn 4
#define LED1_PIN GPIO_PIN_6
#define LED1_GPIO_PORT GPIOG
#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE()
#define LED2_PIN GPIO_PIN_8
#define LED2_GPIO_PORT GPIOG
#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE()
#define LED3_PIN GPIO_PIN_9
#define LED3_GPIO_PORT GPIOI
#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE()
#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE()
#define LED4_PIN GPIO_PIN_7
#define LED4_GPIO_PORT GPIOC
#define LED4_GPIO_CLK RCC_AHB1Periph_GPIOC
#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) LED1_GPIO_CLK_ENABLE(); else \
if((__INDEX__) == 1) LED2_GPIO_CLK_ENABLE(); else \
if((__INDEX__) == 2) LED3_GPIO_CLK_ENABLE(); else \
if((__INDEX__) == 3) LED4_GPIO_CLK_ENABLE(); \
}while(0)
#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) LED1_GPIO_CLK_DISABLE(); else \
if((__INDEX__) == 1) LED2_GPIO_CLK_DISABLE(); else \
if((__INDEX__) == 2) LED3_GPIO_CLK_DISABLE(); else \
if((__INDEX__) == 3) LED4_GPIO_CLK_DISABLE(); \
}while(0)
/**
* @}
*/
/** @addtogroup STM322xG_EVAL_LOW_LEVEL_BUTTON STM322xG EVAL LOW LEVEL BUTTON
* @{
*/
/* Joystick pins are connected to IO Expander (accessible through I2C1 interface) */
#define BUTTONn 3
/**
* @brief Wakeup push-button
*/
#define WAKEUP_BUTTON_PIN GPIO_PIN_0
#define WAKEUP_BUTTON_GPIO_PORT GPIOA
#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn
/**
* @brief Tamper push-button
*/
#define TAMPER_BUTTON_PIN GPIO_PIN_13
#define TAMPER_BUTTON_GPIO_PORT GPIOC
#define TAMPER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define TAMPER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn
/**
* @brief Key push-button
*/
#define KEY_BUTTON_PIN GPIO_PIN_15
#define KEY_BUTTON_GPIO_PORT GPIOG
#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE()
#define KEY_BUTTON_EXTI_IRQn EXTI15_10_IRQn
#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) WAKEUP_BUTTON_GPIO_CLK_ENABLE(); else \
if((__INDEX__) == 1) TAMPER_BUTTON_GPIO_CLK_ENABLE(); else \
if((__INDEX__) == 2) KEY_BUTTON_GPIO_CLK_ENABLE(); \
}while(0)
#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) WAKEUP_BUTTON_GPIO_CLK_DISABLE(); else \
if((__INDEX__) == 1) TAMPER_BUTTON_GPIO_CLK_DISABLE(); else \
if ((__INDEX__) == 2) KEY_BUTTON_GPIO_CLK_DISABLE(); \
}while(0)
/**
* @}
*/
/** @addtogroup STM322xG_EVAL_LOW_LEVEL_COM STM322xG EVAL LOW LEVEL COM
* @{
*/
#define COMn 1
/**
* @brief Definition for COM port1, connected to USART3
*/
#define EVAL_COM1 USART3
#define EVAL_COM1_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE()
#define EVAL_COM1_CLK_DISABLE() __HAL_RCC_USART3_CLK_DISABLE()
#define EVAL_COM1_TX_PIN GPIO_PIN_10
#define EVAL_COM1_TX_GPIO_PORT GPIOC
#define EVAL_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define EVAL_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
#define EVAL_COM1_TX_AF GPIO_AF7_USART3
#define EVAL_COM1_RX_PIN GPIO_PIN_11
#define EVAL_COM1_RX_GPIO_PORT GPIOC
#define EVAL_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define EVAL_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
#define EVAL_COM1_RX_AF GPIO_AF7_USART3
#define EVAL_COM1_IRQn USART3_IRQn
#define EVAL_COMx_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_CLK_ENABLE(); \
}while(0)
#define EVAL_COMx_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_CLK_DISABLE(); \
}while(0)
#define EVAL_COMx_TX_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_TX_GPIO_CLK_ENABLE(); \
}while(0)
#define EVAL_COMx_TX_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_TX_GPIO_CLK_DISABLE(); \
}while(0)
#define EVAL_COMx_RX_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_RX_GPIO_CLK_ENABLE(); \
}while(0)
#define EVAL_COMx_RX_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_RX_GPIO_CLK_DISABLE(); \
}while(0)
/**
* @brief Definition for Potentiometer, connected to ADC3
*/
#define ADCx ADC3
#define ADCx_CLK_ENABLE() __HAL_RCC_ADC3_CLK_ENABLE()
#define ADCx_CHANNEL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define ADCx_FORCE_RESET() __HAL_RCC_ADC_FORCE_RESET()
#define ADCx_RELEASE_RESET() __HAL_RCC_ADC_RELEASE_RESET()
/* Definition for ADCx Channel Pin */
#define ADCx_CHANNEL_PIN GPIO_PIN_9
#define ADCx_CHANNEL_GPIO_PORT GPIOF
/* Definition for ADCx's Channel */
#define ADCx_CHANNEL ADC_CHANNEL_7
#define SAMPLINGTIME ADC_SAMPLETIME_3CYCLES
#define ADCx_POLL_TIMEOUT 10
/**
* @brief Joystick Pins definition
*/
#define JOY_SEL_PIN IO_PIN_7
#define JOY_DOWN_PIN IO_PIN_6
#define JOY_LEFT_PIN IO_PIN_5
#define JOY_RIGHT_PIN IO_PIN_4
#define JOY_UP_PIN IO_PIN_3
#define JOY_NONE_PIN JOY_ALL_PINS
#define JOY_ALL_PINS (IO_PIN_3 | IO_PIN_4 | IO_PIN_5 | IO_PIN_6 | IO_PIN_7)
/* Exported constantIO -------------------------------------------------------*/
/* I2C clock speed configuration (in Hz)
WARNING:
Make sure that this define is not already declared in other files (ie.
stm322xg_eval.h file). It can be used in parallel by other modules. */
#ifndef BSP_I2C_SPEED
#define BSP_I2C_SPEED 100000
#endif /* BSP_I2C_SPEED */
#define IO_I2C_ADDRESS 0x88
#define TS_I2C_ADDRESS 0x82
#define CAMERA_I2C_ADDRESS 0x60
#define AUDIO_I2C_ADDRESS 0x94
/* For M24C64 devices, E0, E1 and E2 pins are all used for device
address selection (no need for additional address lines). According to the
Hardware connection on the board (on STM322xG-EVAL board E0 = E1 = E2 = 0) */
#define EEPROM_I2C_ADDRESS 0xA0
/* User can use this section to tailor I2Cx/I2Cx instance used and associated
resources */
/* Definition for I2Cx clock resources */
#define EVAL_I2Cx I2C1
#define EVAL_I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE()
#define EVAL_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE()
#define EVAL_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define EVAL_I2Cx_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET()
#define EVAL_I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET()
/* Definition for I2Cx Pins */
#define EVAL_I2Cx_SCL_PIN GPIO_PIN_6
#define EVAL_I2Cx_SCL_SDA_GPIO_PORT GPIOB
#define EVAL_I2Cx_SCL_SDA_AF GPIO_AF4_I2C1
#define EVAL_I2Cx_SDA_PIN GPIO_PIN_9
/* I2C interrupt requests */
#define EVAL_I2Cx_EV_IRQn I2C1_EV_IRQn
#define EVAL_I2Cx_ER_IRQn I2C1_ER_IRQn
/**
* @}
*/
/**
* @}
*/
/** @defgroup STM322xG_EVAL_LOW_LEVEL_Exported_Functions STM322xG EVAL LOW LEVEL Exported Functions
* @{
*/
uint32_t BSP_GetVersion(void);
void BSP_LED_Init(Led_TypeDef Led);
void BSP_LED_On(Led_TypeDef Led);
void BSP_LED_Off(Led_TypeDef Led);
void BSP_LED_Toggle(Led_TypeDef Led);
void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode);
uint32_t BSP_PB_GetState(Button_TypeDef Button);
void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart);
void BSP_POTENTIOMETER_Init(void);
uint32_t BSP_POTENTIOMETER_GetLevel(void);
uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode);
JOYState_TypeDef BSP_JOY_GetState(void);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM322xG_EVAL_H */

View File

@ -1,659 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_audio.c
* @author MCD Application Team
* @brief This file provides the Audio driver for the STM322xG-EVAL evaluation
* board.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/*==============================================================================
User NOTES
How To use this driver:
-----------------------
+ This driver supports STM32F2xx devices on STM322xG-EVAL Evaluation board.
+ Call the function BSP_AUDIO_OUT_Init(
OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER,
OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_AUTO or
OUTPUT_DEVICE_BOTH)
Volume: initial volume to be set (0 is min (mute), 100 is max (100%)
AudioFreq: Audio frequency in Hz (8000, 16000, 22500, 32000 ...)
this parameter is relative to the audio file/stream type.
)
This function configures all the hardware required for the audio application (codec, I2C, I2S,
GPIOs, DMA and interrupt if needed). This function returns 0 if configuration is OK.
If the returned value is different from 0 or the function is stuck then the communication with
the codec or the IOExpander has failed (try to un-plug the power or reset device in this case).
- OUTPUT_DEVICE_SPEAKER: only speaker will be set as output for the audio stream.
- OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream.
- OUTPUT_DEVICE_AUTO: Selection of output device is made through external switch (implemented
into the audio jack on the evaluation board). When the Headphone is connected it is used
as output. When the headphone is disconnected from the audio jack, the output is
automatically switched to Speaker.
- OUTPUT_DEVICE_BOTH: both Speaker and Headphone are used as outputs for the audio stream
at the same time.
+ Call the function BSP_AUDIO_OUT_Play(
pBuffer: pointer to the audio data file address
Size: size of the buffer to be sent in Bytes
)
to start playing (for the first time) from the audio file/stream.
+ Call the function BSP_AUDIO_OUT_Pause() to pause playing
+ Call the function BSP_AUDIO_OUT_Resume() to resume playing.
Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called
for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case).
Note. This function should be called only when the audio file is played or paused (not stopped).
+ For each mode, you may need to implement the relative callback functions into your code.
The Callback functions are named AUDIO_OUT_XXX_CallBack() and only their prototypes are declared in
the stm322xg_eval_audio.h file. (refer to the example for more details on the callbacks implementations)
+ To Stop playing, to modify the volume level or to mute, use the functions
BSP_AUDIO_OUT_Stop(), BSP_AUDIO_OUT_SetVolume(), AUDIO_OUT_SetFrequency() BSP_AUDIO_OUT_SetOutputMode and BSP_AUDIO_OUT_SetMute().
+ The driver API and the callback functions are at the end of the stm322xg_eval_audio.h file.
Driver architecture:
-------------------
+ This driver provide the High Audio Layer: consists of the function API exported in the stm322xg_eval_audio.h file
(BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...)
+ This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/
providing the audio file/stream. These functions are also included as local functions into
the stm322xg_eval_audio_codec.c file (I2Sx_MspInit() and I2Sx_Init())
Known Limitations:
-------------------
1- When using the Speaker, if the audio file quality is not high enough, the speaker output
may produce high and uncomfortable noise level. To avoid this issue, to use speaker
output properly, try to increase audio file sampling rate (typically higher than 48KHz).
This operation will lead to larger file size.
2- Communication with the audio codec (through I2C) may be corrupted if it is interrupted by some
user interrupt routines (in this case, interrupts could be disabled just before the start of
communication then re-enabled when it is over). Note that this communication is only done at
the configuration phase (BSP_AUDIO_OUT_Init() or BSP_AUDIO_OUT_Stop()) and when Volume control modification is
performed (BSP_AUDIO_OUT_SetVolume() or AUDIO_OUT_Mute() or BSP_AUDIO_OUT_SetOutputMode()).
When the audio data is played, no communication is required with the audio codec.
3- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size,
File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file.
4- Supports only Stereo audio streaming. To play mono audio streams, each data should be sent twice
on the I2S or should be duplicated on the source buffer. Or convert the stream in stereo before playing.
5- Supports only 16-bits audio data size.
==============================================================================*/
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval_audio.h"
#include "stm322xg_eval_io.h" /* IOExpander driver is included in order to allow
CS43L22 codec reset pin managment on the evaluation board */
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @defgroup STM322xG_EVAL_AUDIO STM322xG EVAL AUDIO
* @brief This file includes the low layer audio driver available on STM322xG-EVAL
* evaluation board.
* @{
*/
/** @defgroup STM322xG_EVAL_AUDIO_Private_Defines STM322xG EVAL AUDIO Private Defines
* @{
*/
/* These PLL parameters are valide when the f(VCO clock) = 1Mhz */
const uint32_t I2SFreq[8] = {8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000};
const uint32_t I2SPLLN[8] = {256, 429, 213, 429, 426, 271, 258, 344};
const uint32_t I2SPLLR[8] = {5, 4, 4, 4, 4, 6, 3, 1};
/**
* @}
*/
/** @defgroup STM322xG_EVAL_AUDIO_Private_Variables STM322xG EVAL AUDIO Private Variables
* @{
*/
AUDIO_DrvTypeDef *audio_drv;
I2S_HandleTypeDef haudio_i2s;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_AUDIO_Private_Function_Prototypes STM322xG EVAL AUDIO Private Function Prototypes
* @{
*/
static void I2Sx_Init(uint32_t AudioFreq);
static void I2Sx_DeInit(void);
static void CODEC_Reset(void);
/**
* @}
*/
/** @defgroup STM322xG_EVAL_AUDIO_Private_Functions STM322xG EVAL AUDIO Private Functions
* @{
*/
/**
* @brief Configures the audio peripherals.
* @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE,
* OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO .
* @param Volume: Initial volume level (from 0 (Mute) to 100 (Max))
* @param AudioFreq: Audio frequency used to play the audio stream.
* @note This function configure also that the I2S PLL input clock.
* @retval 0 if correct communication, else wrong communication
*/
uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq)
{
uint8_t ret = AUDIO_ERROR;
/* Disable I2S */
I2Sx_DeInit();
/* Configure PLL clock depending on AudioFreq */
BSP_AUDIO_OUT_ClockConfig(&haudio_i2s, AudioFreq, NULL);
/* I2S data transfer preparation:
Prepare the Media to be used for the audio transfer from memory to I2S peripheral */
haudio_i2s.Instance = AUDIO_I2Sx;
if(HAL_I2S_GetState(&haudio_i2s) == HAL_I2S_STATE_RESET)
{
/* Init the I2S MSP: this __weak function can be redefined by the application*/
BSP_AUDIO_OUT_MspInit(&haudio_i2s, NULL);
}
/* Configure the I2S peripheral */
I2Sx_Init(AudioFreq);
/* Reset the Codec Registers */
CODEC_Reset();
if(((cs43l22_drv.ReadID(AUDIO_I2C_ADDRESS)) & CS43L22_ID_MASK) == CS43L22_ID)
{
/* Initialize the audio driver structure */
audio_drv = &cs43l22_drv;
ret = AUDIO_OK;
}
else
{
ret = AUDIO_ERROR;
}
if(ret == AUDIO_OK)
{
audio_drv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq);
}
return ret;
}
/**
* @brief De-initialize the audio peripherals.
* @retval None
*/
void BSP_AUDIO_OUT_DeInit(void)
{
I2Sx_DeInit();
/* DeInit the I2S MSP : this __weak function can be rewritten by the application */
BSP_AUDIO_OUT_MspDeInit(&haudio_i2s, NULL);
}
/**
* @brief Starts playing audio stream from a data buffer for a determined size.
* @param pBuffer: Pointer to the buffer
* @param Size: Number of audio data BYTES.
* @retval AUDIO_OK if correct communication, else wrong communication
*/
uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size)
{
/* Call the audio Codec Play function */
if(audio_drv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Update the Media layer and enable it for play */
HAL_I2S_Transmit_DMA(&haudio_i2s, pBuffer, DMA_MAX(Size/AUDIODATA_SIZE));
return AUDIO_OK;
}
}
/**
* @brief Sends n-Bytes on the I2S interface.
* @param pData: Pointer to data address
* @param Size: Number of data to be written.
*/
void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size)
{
HAL_I2S_Transmit_DMA(&haudio_i2s, pData, Size);
}
/**
* @brief Pauses the audio file stream.
* In case of using DMA, the DMA Pause feature is used.
* WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only
* BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play()
* function for resume could lead to unexpected behavior).
* @retval AUDIO_OK if correct communication, else wrong communication
*/
uint8_t BSP_AUDIO_OUT_Pause(void)
{
/* Call the Audio Codec Pause/Resume function */
if(audio_drv->Pause(AUDIO_I2C_ADDRESS) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Call the Media layer pause function */
HAL_I2S_DMAPause(&haudio_i2s);
/* Return AUDIO_OK when all operations are correctly done */
return AUDIO_OK;
}
}
/**
* @brief Resumes the audio file stream.
* WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only
* BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play()
* function for resume could lead to unexpected behavior).
* @retval AUDIO_OK if correct communication, else wrong communication
*/
uint8_t BSP_AUDIO_OUT_Resume(void)
{
/* Call the Audio Codec Pause/Resume function */
if(audio_drv->Resume(AUDIO_I2C_ADDRESS) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Call the Media layer pause/resume function */
HAL_I2S_DMAResume(&haudio_i2s);
/* Return AUDIO_OK when all operations are correctly done */
return AUDIO_OK;
}
}
/**
* @brief Stops audio playing and Power down the Audio Codec.
* @param Option: could be one of the following parameters
* - CODEC_PDWN_SW: for software power off (by writing registers).
* Then no need to reconfigure the Codec after power on.
* - CODEC_PDWN_HW: completely shut down the codec (physically).
* Then need to reconfigure the Codec after power on.
* @retval AUDIO_OK if correct communication, else wrong communication
*/
uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option)
{
/* Call the Media layer stop function */
HAL_I2S_DMAStop(&haudio_i2s);
/* Call Audio Codec Stop function */
if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0)
{
return AUDIO_ERROR;
}
else
{
if(Option == CODEC_PDWN_HW)
{
/* Wait at least 1ms */
HAL_Delay(1);
/* Reset the pin */
BSP_IO_WritePin(AUDIO_RESET_PIN, RESET);
}
/* Return AUDIO_OK when all operations are correctly done */
return AUDIO_OK;
}
}
/**
* @brief Controls the current audio volume level.
* @param Volume: Volume level to be set in percentage from 0% to 100% (0 for
* Mute and 100 for Max volume level).
* @retval AUDIO_OK if correct communication, else wrong communication
*/
uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume)
{
/* Call the codec volume control function with converted volume value */
if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Return AUDIO_OK when all operations are correctly done */
return AUDIO_OK;
}
}
/**
* @brief Enables or disables the MUTE mode by software
* @param Cmd: could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to
* unmute the codec and restore previous volume level.
* @retval AUDIO_OK if correct communication, else wrong communication
*/
uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd)
{
/* Call the Codec Mute function */
if(audio_drv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Return AUDIO_OK when all operations are correctly done */
return AUDIO_OK;
}
}
/**
* @brief Switch dynamically (while audio file is played) the output target
* (speaker or headphone).
* @note This function modifies a global variable of the audio codec driver: OutputDev.
* @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER,
* OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO
* @retval AUDIO_OK if correct communication, else wrong communication
*/
uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output)
{
/* Call the Codec output Device function */
if(audio_drv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Return AUDIO_OK when all operations are correctly done */
return AUDIO_OK;
}
}
/**
* @brief Updates the audio frequency.
* @param AudioFreq: Audio frequency used to play the audio stream.
* @retval AUDIO_OK if correct communication, else wrong communication
*/
void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq)
{
/* Configure PLL clock depending on AudioFreq */
BSP_AUDIO_OUT_ClockConfig(&haudio_i2s, AudioFreq, NULL);
/* Update the I2S audio frequency configuration */
I2Sx_Init(AudioFreq);
}
/**
* @brief Clock Config.
* @param hi2s: might be required to set audio peripheral predivider if any.
* @param AudioFreq: Audio frequency used to play the audio stream.
* @param Params
* @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency()
* Being __weak it can be overwritten by the application
* @retval None
*/
__weak void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params)
{
RCC_PeriphCLKInitTypeDef RCC_ExCLKInitStruct;
uint8_t index = 0, freqindex = 0xFF;
for(index = 0; index < 8; index++)
{
if(I2SFreq[index] == AudioFreq)
{
freqindex = index;
}
}
HAL_RCCEx_GetPeriphCLKConfig(&RCC_ExCLKInitStruct);
if(freqindex != 0xFF)
{
/* I2S clock config
PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM)
I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */
RCC_ExCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S;
RCC_ExCLKInitStruct.PLLI2S.PLLI2SN = I2SPLLN[freqindex];
RCC_ExCLKInitStruct.PLLI2S.PLLI2SR = I2SPLLR[freqindex];
HAL_RCCEx_PeriphCLKConfig(&RCC_ExCLKInitStruct);
}
else /* Default PLL I2S configuration */
{
/* I2S clock config
PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM)
I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */
RCC_ExCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S;
RCC_ExCLKInitStruct.PLLI2S.PLLI2SN = 258;
RCC_ExCLKInitStruct.PLLI2S.PLLI2SR = 3;
HAL_RCCEx_PeriphCLKConfig(&RCC_ExCLKInitStruct);
}
}
/**
* @brief Initializes BSP_AUDIO_OUT MSP.
* @param hi2s: I2S handle
* @param Params
*/
__weak void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params)
{
static DMA_HandleTypeDef hdma_i2sTx;
GPIO_InitTypeDef GPIO_InitStruct;
/* Enable I2S clock */
AUDIO_I2Sx_CLK_ENABLE();
/* Enable SCK, SD and WS GPIO clock */
AUDIO_I2Sx_SCK_SD_WS_CLK_ENABLE();
/* CODEC_I2S pins configuration: WS, SCK and SD pins */
GPIO_InitStruct.Pin = AUDIO_I2Sx_WS_PIN | AUDIO_I2Sx_SCK_PIN | AUDIO_I2Sx_SD_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
GPIO_InitStruct.Alternate = AUDIO_I2Sx_SCK_SD_WS_AF;
HAL_GPIO_Init(AUDIO_I2Sx_SCK_SD_WS_GPIO_PORT, &GPIO_InitStruct);
/* Enable MCK GPIO clock */
AUDIO_I2Sx_MCK_CLK_ENABLE();
/* CODEC_I2S pins configuration: MCK pin */
GPIO_InitStruct.Pin = AUDIO_I2Sx_MCK_PIN;
HAL_GPIO_Init(AUDIO_I2Sx_MCK_GPIO_PORT, &GPIO_InitStruct);
/* Enable the DMA clock */
AUDIO_I2Sx_DMAx_CLK_ENABLE();
if(hi2s->Instance == AUDIO_I2Sx)
{
/* Configure the hdma_i2sTx handle parameters */
hdma_i2sTx.Init.Channel = AUDIO_I2Sx_DMAx_CHANNEL;
hdma_i2sTx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_i2sTx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_i2sTx.Init.MemInc = DMA_MINC_ENABLE;
hdma_i2sTx.Init.PeriphDataAlignment = AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE;
hdma_i2sTx.Init.MemDataAlignment = AUDIO_I2Sx_DMAx_MEM_DATA_SIZE;
hdma_i2sTx.Init.Mode = DMA_NORMAL;
hdma_i2sTx.Init.Priority = DMA_PRIORITY_HIGH;
hdma_i2sTx.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
hdma_i2sTx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma_i2sTx.Init.MemBurst = DMA_MBURST_SINGLE;
hdma_i2sTx.Init.PeriphBurst = DMA_PBURST_SINGLE;
hdma_i2sTx.Instance = AUDIO_I2Sx_DMAx_STREAM;
/* Associate the DMA handle */
__HAL_LINKDMA(hi2s, hdmatx, hdma_i2sTx);
/* Deinitialize the Stream for new transfer */
HAL_DMA_DeInit(&hdma_i2sTx);
/* Configure the DMA Stream */
HAL_DMA_Init(&hdma_i2sTx);
}
/* I2S DMA IRQ Channel configuration */
HAL_NVIC_SetPriority(AUDIO_I2Sx_DMAx_IRQ, AUDIO_IRQ_PREPRIO, 0);
HAL_NVIC_EnableIRQ(AUDIO_I2Sx_DMAx_IRQ);
}
/**
* @brief De-Initializes BSP_AUDIO_OUT MSP.
* @param hi2s: I2S handle
* @param Params
*/
__weak void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* Disable I2S clock */
AUDIO_I2Sx_CLK_DISABLE();
/* CODEC_I2S pins configuration: WS, SCK and SD pins */
GPIO_InitStruct.Pin = AUDIO_I2Sx_WS_PIN | AUDIO_I2Sx_SCK_PIN | AUDIO_I2Sx_SD_PIN;
HAL_GPIO_DeInit(AUDIO_I2Sx_SCK_SD_WS_GPIO_PORT, GPIO_InitStruct.Pin);
/* CODEC_I2S pins configuration: MCK pin */
GPIO_InitStruct.Pin = AUDIO_I2Sx_MCK_PIN;
HAL_GPIO_DeInit(AUDIO_I2Sx_MCK_GPIO_PORT, GPIO_InitStruct.Pin);
}
/**
* @brief Tx Transfer completed callbacks
* @param hi2s: I2S handle
*/
void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s)
{
/* Manage the remaining file size and new address offset: This function
should be coded by user (its prototype is already declared in stm322xg_eval_audio.h) */
BSP_AUDIO_OUT_TransferComplete_CallBack();
}
/**
* @brief Tx Transfer Half completed callbacks
* @param hi2s: I2S handle
*/
void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s)
{
/* Manage the remaining file size and new address offset: This function
should be coded by user (its prototype is already declared in stm322xg_eval_audio.h) */
BSP_AUDIO_OUT_HalfTransfer_CallBack();
}
/**
* @brief I2S error callbacks.
* @param hi2s: I2S handle
*/
void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s)
{
BSP_AUDIO_OUT_Error_CallBack();
}
/**
* @brief Manages the DMA full Transfer complete event.
*/
__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void)
{
}
/**
* @brief Manages the DMA Half Transfer complete event.
*/
__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void)
{
}
/**
* @brief Manages the DMA FIFO error event.
*/
__weak void BSP_AUDIO_OUT_Error_CallBack(void)
{
}
/*******************************************************************************
Static Functions
*******************************************************************************/
/**
* @brief Initializes the Audio Codec audio interface (I2S).
* @param AudioFreq: Audio frequency to be configured for the I2S peripheral.
*/
static void I2Sx_Init(uint32_t AudioFreq)
{
/* Initialize the haudio_i2s Instance parameter */
haudio_i2s.Instance = AUDIO_I2Sx;
/* Disable I2S block */
__HAL_I2S_DISABLE(&haudio_i2s);
haudio_i2s.Init.Mode = I2S_MODE_MASTER_TX;
haudio_i2s.Init.Standard = I2S_STANDARD;
haudio_i2s.Init.DataFormat = I2S_DATAFORMAT_16B;
haudio_i2s.Init.AudioFreq = AudioFreq;
haudio_i2s.Init.CPOL = I2S_CPOL_LOW;
haudio_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE;
/* Init the I2S */
HAL_I2S_Init(&haudio_i2s);
}
/**
* @brief Deinitialize the Audio Codec audio interface (I2S).
*/
static void I2Sx_DeInit(void)
{
/* Initialize the haudio_i2s Instance parameter */
haudio_i2s.Instance = AUDIO_I2Sx;
/* Disable I2S peripheral */
__HAL_I2S_DISABLE(&haudio_i2s);
HAL_I2S_DeInit(&haudio_i2s);
}
/**
* @brief Resets the audio codec. It restores the default configuration of the
* codec (this function shall be called before initializing the codec).
* @note This function calls an external driver function: The IO Expander driver.
*/
static void CODEC_Reset(void)
{
/* Configure the IO Expander (to use the Codec Reset pin mapped on the IOExpander) */
BSP_IO_Init();
BSP_IO_ConfigPin(AUDIO_RESET_PIN, IO_MODE_OUTPUT);
/* Power Down the codec */
BSP_IO_WritePin(AUDIO_RESET_PIN, RESET);
/* Wait for a delay to insure registers erasing */
HAL_Delay(CODEC_RESET_DELAY);
/* Power on the codec */
BSP_IO_WritePin(AUDIO_RESET_PIN, SET);
/* Wait for a delay to insure registers erasing */
HAL_Delay(CODEC_RESET_DELAY);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,159 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_audio.h
* @author MCD Application Team
* @brief This file contains the common defines and functions prototypes for
* the stm322xg_eval_audio.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM322xG_EVAL_AUDIO_H
#define __STM322xG_EVAL_AUDIO_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "../Components/cs43l22/cs43l22.h"
#include "stm322xg_eval.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @addtogroup STM322xG_EVAL_AUDIO
* @{
*/
/** @defgroup STM322xG_EVAL_AUDIO_Exported_Constants STM322xG EVAL AUDIO Exported Constants
* @{
*/
/* Audio Reset Pin definition */
#define AUDIO_RESET_PIN IO_PIN_2
/* I2S peripheral configuration defines */
#define AUDIO_I2Sx SPI2
#define AUDIO_I2Sx_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE()
#define AUDIO_I2Sx_CLK_DISABLE() __HAL_RCC_SPI2_CLK_DISABLE()
#define AUDIO_I2Sx_SCK_SD_WS_AF GPIO_AF5_SPI2
#define AUDIO_I2Sx_SCK_SD_WS_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE()
#define AUDIO_I2Sx_MCK_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define AUDIO_I2Sx_WS_PIN GPIO_PIN_0
#define AUDIO_I2Sx_SCK_PIN GPIO_PIN_1
#define AUDIO_I2Sx_SD_PIN GPIO_PIN_3
#define AUDIO_I2Sx_MCK_PIN GPIO_PIN_6
#define AUDIO_I2Sx_SCK_SD_WS_GPIO_PORT GPIOI
#define AUDIO_I2Sx_MCK_GPIO_PORT GPIOC
/* I2S DMA Stream definitions */
#define AUDIO_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE()
#define AUDIO_I2Sx_DMAx_STREAM DMA1_Stream4
#define AUDIO_I2Sx_DMAx_CHANNEL DMA_CHANNEL_0
#define AUDIO_I2Sx_DMAx_IRQ DMA1_Stream4_IRQn
#define AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD
#define AUDIO_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD
#define DMA_MAX_SZE 0xFFFF
#define AUDIO_I2Sx_DMAx_IRQHandler DMA1_Stream4_IRQHandler
/*------------------------------------------------------------------------------
CONFIGURATION: Audio Driver Configuration parameters
------------------------------------------------------------------------------*/
/* Select the interrupt preemption priority for the DMA interrupt */
#define AUDIO_IRQ_PREPRIO 0x0F /* Select the preemption priority level(0 is the highest) */
#define AUDIODATA_SIZE 2 /* 16-bits audio data size */
/* Audio status definition */
#define AUDIO_OK 0x00
#define AUDIO_ERROR 0x01
#define AUDIO_TIMEOUT 0x02
/*------------------------------------------------------------------------------
OPTIONAL Configuration defines parameters
------------------------------------------------------------------------------*/
/* Delay for the Codec to be correctly reset */
#define CODEC_RESET_DELAY 5
/**
* @}
*/
/** @defgroup STM322xG_EVAL_AUDIO_Exported_Macros STM322xG EVAL AUDIO Exported Macros
* @{
*/
#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE)
/**
* @}
*/
/** @defgroup STM322xG_EVAL_AUDIO_Exported_Functions STM322xG EVAL AUDIO Exported Functions
* @{
*/
uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq);
void BSP_AUDIO_OUT_DeInit(void);
uint8_t BSP_AUDIO_OUT_Play(uint16_t *pBuffer, uint32_t Size);
void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size);
uint8_t BSP_AUDIO_OUT_Pause(void);
uint8_t BSP_AUDIO_OUT_Resume(void);
uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option);
uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume);
void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq);
uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd);
uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output);
/* User Callbacks: user has to implement these functions in his code if they are needed. */
/* This function is called when the requested data has been completely transferred.*/
void BSP_AUDIO_OUT_TransferComplete_CallBack(void);
/* This function is called when half of the requested buffer has been transferred. */
void BSP_AUDIO_OUT_HalfTransfer_CallBack(void);
/* This function is called when an Interrupt due to transfer error on or peripheral
error occurs. */
void BSP_AUDIO_OUT_Error_CallBack(void);
/* These function can be modified in case the current settings (e.g. DMA stream)
need to be changed for specific application needs */
void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params);
void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params);
void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM322xG_EVAL_AUDIO_H */

View File

@ -1,463 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_camera.c
* @author MCD Application Team
* @brief This file includes the driver for Camera module mounted on
* STM322xG-EVAL evaluation board(MB786).
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* File Info: ------------------------------------------------------------------
User NOTES
1. How to use this driver:
--------------------------
- This driver is used to drive the Camera.
- The OV2640 component driver MUST be included with this driver.
2. Driver description:
---------------------
+ Initialization steps:
o Initialize the Camera using the BSP_CAMERA_Init() function.
o Start the Camera capture or snapshot using CAMERA_Start() function.
o Suspend, resume or stop the Camera capture using the following functions:
- BSP_CAMERA_Suspend()
- BSP_CAMERA_Resume()
- BSP_CAMERA_Stop()
+ Options
o Increase or decrease on the fly the brightness and/or contrast
using the following function:
- BSP_CAMERA_ContrastBrightnessConfig
o Add a special effect on the fly using the following functions:
- BSP_CAMERA_BlackWhiteConfig()
- BSP_CAMERA_ColorEffectConfig()
------------------------------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval_camera.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @defgroup STM322xG_EVAL_CAMERA STM322xG EVAL CAMERA
* @{
*/
/** @defgroup STM322xG_EVAL_CAMERA_Private_Variables STM322xG EVAL CAMERA Private Variables
* @{
*/
DCMI_HandleTypeDef hdcmi_eval;
CAMERA_DrvTypeDef *camera_drv;
uint32_t current_resolution;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_CAMERA_Private_FunctionPrototypes STM322xG EVAL CAMERA Private FunctionPrototypes
* @{
*/
static uint32_t GetSize(uint32_t resolution);
/**
* @}
*/
/** @defgroup STM322xG_EVAL_CAMERA_Private_Functions STM322xG EVAL CAMERA Private Functions
* @{
*/
/**
* @brief Initializes the Camera.
* @param Resolution: Camera resolution
* @retval Camera status
*/
uint8_t BSP_CAMERA_Init(uint32_t Resolution)
{
DCMI_HandleTypeDef *phdcmi;
uint8_t ret = CAMERA_ERROR;
/* Get the DCMI handle structure */
phdcmi = &hdcmi_eval;
/*** Configures the DCMI to interface with the Camera module ***/
/* DCMI configuration */
phdcmi->Init.CaptureRate = DCMI_CR_ALL_FRAME;
phdcmi->Init.HSPolarity = DCMI_HSPOLARITY_LOW;
phdcmi->Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;
phdcmi->Init.VSPolarity = DCMI_VSPOLARITY_LOW;
phdcmi->Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
phdcmi->Init.PCKPolarity = DCMI_PCKPOLARITY_RISING;
phdcmi->Instance = DCMI;
/* DCMI Initialization */
BSP_CAMERA_MspInit();
HAL_DCMI_Init(phdcmi);
if(ov2640_drv.ReadID(CAMERA_I2C_ADDRESS) == OV2640_ID)
{
/* Initialize the Camera driver structure */
camera_drv = &ov2640_drv;
/* Camera Init */
camera_drv->Init(CAMERA_I2C_ADDRESS, Resolution);
/* Return CAMERA_OK status */
ret = CAMERA_OK;
}
current_resolution = Resolution;
return ret;
}
/**
* @brief Starts the Camera capture in continuous mode.
* @param buff: pointer to the Camera output buffer
*/
void BSP_CAMERA_ContinuousStart(uint8_t *buff)
{
/* Start the Camera capture */
HAL_DCMI_Start_DMA(&hdcmi_eval, DCMI_MODE_CONTINUOUS, (uint32_t)buff, GetSize(current_resolution));
}
/**
* @brief Starts the Camera capture in snapshot mode.
* @param buff: pointer to the Camera output buffer
*/
void BSP_CAMERA_SnapshotStart(uint8_t *buff)
{
/* Start the Camera capture */
HAL_DCMI_Start_DMA(&hdcmi_eval, DCMI_MODE_SNAPSHOT, (uint32_t)buff, GetSize(current_resolution));
}
/**
* @brief Suspends the Camera capture.
*/
void BSP_CAMERA_Suspend(void)
{
/* Suspend the Camera Capture */
HAL_DCMI_Suspend(&hdcmi_eval);
}
/**
* @brief Resumes the Camera capture.
*/
void BSP_CAMERA_Resume(void)
{
/* Start the Camera Capture */
HAL_DCMI_Resume(&hdcmi_eval);
}
/**
* @brief Stops the Camera capture.
* @retval Camera status
*/
uint8_t BSP_CAMERA_Stop(void)
{
DCMI_HandleTypeDef *phdcmi;
uint8_t ret = CAMERA_ERROR;
/* Get the DCMI handle structure */
phdcmi = &hdcmi_eval;
if(HAL_DCMI_Stop(phdcmi) == HAL_OK)
{
ret = CAMERA_OK;
}
return ret;
}
/**
* @brief Configures the Camera contrast and brightness.
* @param contrast_level: Contrast level
* This parameter can be one of the following values:
* @arg CAMERA_CONTRAST_LEVEL4: for contrast +2
* @arg CAMERA_CONTRAST_LEVEL3: for contrast +1
* @arg CAMERA_CONTRAST_LEVEL2: for contrast 0
* @arg CAMERA_CONTRAST_LEVEL1: for contrast -1
* @arg CAMERA_CONTRAST_LEVEL0: for contrast -2
* @param brightness_level: Brightness level
* This parameter can be one of the following values:
* @arg CAMERA_BRIGHTNESS_LEVEL4: for brightness +2
* @arg CAMERA_BRIGHTNESS_LEVEL3: for brightness +1
* @arg CAMERA_BRIGHTNESS_LEVEL2: for brightness 0
* @arg CAMERA_BRIGHTNESS_LEVEL1: for brightness -1
* @arg CAMERA_BRIGHTNESS_LEVEL0: for brightness -2
*/
void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level)
{
if(camera_drv->Config != NULL)
{
camera_drv->Config(CAMERA_I2C_ADDRESS, CAMERA_CONTRAST_BRIGHTNESS, contrast_level, brightness_level);
}
}
/**
* @brief Configures the Camera white balance.
* @param Mode: black_white mode
* This parameter can be one of the following values:
* @arg CAMERA_BLACK_WHITE_BW
* @arg CAMERA_BLACK_WHITE_NEGATIVE
* @arg CAMERA_BLACK_WHITE_BW_NEGATIVE
* @arg CAMERA_BLACK_WHITE_NORMAL
*/
void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode)
{
if(camera_drv->Config != NULL)
{
camera_drv->Config(CAMERA_I2C_ADDRESS, CAMERA_BLACK_WHITE, Mode, 0);
}
}
/**
* @brief Configures the Camera color effect.
* @param Effect: Color effect
* This parameter can be one of the following values:
* @arg CAMERA_COLOR_EFFECT_ANTIQUE
* @arg CAMERA_COLOR_EFFECT_BLUE
* @arg CAMERA_COLOR_EFFECT_GREEN
* @arg CAMERA_COLOR_EFFECT_RED
*/
void BSP_CAMERA_ColorEffectConfig(uint32_t Effect)
{
if(camera_drv->Config != NULL)
{
camera_drv->Config(CAMERA_I2C_ADDRESS, CAMERA_COLOR_EFFECT, Effect, 0);
}
}
/**
* @brief Handles DCMI interrupt request.
*/
void BSP_CAMERA_IRQHandler(void)
{
HAL_DCMI_IRQHandler(&hdcmi_eval);
}
/**
* @brief Handles DMA interrupt request.
*/
void BSP_CAMERA_DMA_IRQHandler(void)
{
HAL_DMA_IRQHandler(hdcmi_eval.DMA_Handle);
}
/**
* @brief Get the capture size.
* @param resolution: the current resolution.
* @retval cpature size
*/
static uint32_t GetSize(uint32_t resolution)
{
uint32_t size = 0;
/* Get capture size */
switch (resolution)
{
case CAMERA_R160x120:
{
size = 0x2580;
}
break;
case CAMERA_R320x240:
{
size = 0x9600;
}
break;
default:
{
break;
}
}
return size;
}
/**
* @brief Initializes the DCMI MSP.
*/
__weak void BSP_CAMERA_MspInit(void)
{
static DMA_HandleTypeDef hdma;
GPIO_InitTypeDef GPIO_Init_Structure;
DCMI_HandleTypeDef *hdcmi = &hdcmi_eval;
/*** Enable peripherals and GPIO clocks ***/
/* Enable DCMI clock */
__HAL_RCC_DCMI_CLK_ENABLE();
/* Enable DMA2 clock */
__HAL_RCC_DMA2_CLK_ENABLE();
/* Enable GPIO clocks */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOI_CLK_ENABLE();
/*** Configure the GPIO ***/
/* Configure DCMI GPIO as alternate function */
GPIO_Init_Structure.Pin = GPIO_PIN_6;
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_PULLUP;
GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI;
HAL_GPIO_Init(GPIOA, &GPIO_Init_Structure);
GPIO_Init_Structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |\
GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_14;
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_PULLUP;
GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI;
HAL_GPIO_Init(GPIOH, &GPIO_Init_Structure);
GPIO_Init_Structure.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 |\
GPIO_PIN_7;
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_PULLUP;
GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI;
HAL_GPIO_Init(GPIOI, &GPIO_Init_Structure);
/*** Configure the DMA streams ***/
/* Configure the DMA handler for Transmission process */
hdma.Init.Channel = DMA_CHANNEL_1;
hdma.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma.Init.PeriphInc = DMA_PINC_DISABLE;
hdma.Init.MemInc = DMA_MINC_ENABLE;
hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
hdma.Init.Mode = DMA_CIRCULAR;
hdma.Init.Priority = DMA_PRIORITY_HIGH;
hdma.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
hdma.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma.Init.MemBurst = DMA_MBURST_SINGLE;
hdma.Init.PeriphBurst = DMA_PBURST_SINGLE;
hdma.Instance = DMA2_Stream1;
/* Associate the initialized DMA handle to the DCMI handle */
__HAL_LINKDMA(hdcmi, DMA_Handle, hdma);
/*** Configure the NVIC for DCMI and DMA ***/
/* NVIC configuration for DCMI transfer complete interrupt */
HAL_NVIC_SetPriority(DCMI_IRQn, 0x0F, 0);
HAL_NVIC_EnableIRQ(DCMI_IRQn);
/* NVIC configuration for DMA2 transfer complete interrupt */
HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0x0F, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
/* Configure the DMA stream */
HAL_DMA_Init(hdcmi->DMA_Handle);
}
/**
* @brief Line event callback
* @param hdcmi: pointer to the DCMI handle
*/
void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi)
{
BSP_CAMERA_LineEventCallback();
}
/**
* @brief Line Event callback.
*/
__weak void BSP_CAMERA_LineEventCallback(void)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_DCMI_LineEventCallback could be implemented in the user file
*/
}
/**
* @brief VSYNC event callback
* @param hdcmi: pointer to the DCMI handle
*/
void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi)
{
BSP_CAMERA_VsyncEventCallback();
}
/**
* @brief VSYNC Event callback.
*/
__weak void BSP_CAMERA_VsyncEventCallback(void)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_DCMI_VsyncEventCallback could be implemented in the user file
*/
}
/**
* @brief Frame event callback
* @param hdcmi: pointer to the DCMI handle
*/
void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
{
BSP_CAMERA_FrameEventCallback();
}
/**
* @brief Frame Event callback.
*/
__weak void BSP_CAMERA_FrameEventCallback(void)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_DCMI_FrameEventCallback could be implemented in the user file
*/
}
/**
* @brief Error callback
* @param hdcmi: pointer to the DCMI handle
*/
void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi)
{
BSP_CAMERA_ErrorCallback();
}
/**
* @brief Error callback.
*/
__weak void BSP_CAMERA_ErrorCallback(void)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_DCMI_ErrorCallback could be implemented in the user file
*/
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,122 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_camera.h
* @author MCD Application Team
* @brief This file contains all the functions prototypes for the
* stm322xg_eval_camera.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM322xG_EVAL_CAMERA_H
#define __STM322xG_EVAL_CAMERA_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval.h"
#include "stm322xg_eval_io.h"
/* Include Camera component Driver */
#include "../Components/ov2640/ov2640.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @addtogroup STM322xG_EVAL_CAMERA
* @{
*/
/** @defgroup STM322xG_EVAL_CAMERA_Exported_Types STM322xG EVAL CAMERA Exported Types
* @{
*/
/**
* @brief Camera status structure definition
*/
typedef enum
{
CAMERA_OK = 0x00,
CAMERA_ERROR = 0x01,
CAMERA_TIMEOUT = 0x02
}Camera_StatusTypeDef;
#define RESOLUTION_R160x120 CAMERA_R160x120 /* QQVGA Resolution */
#define RESOLUTION_R320x240 CAMERA_R320x240 /* QVGA Resolution */
/**
* @}
*/
/** @defgroup STM322xG_EVAL_CAMERA_Exported_Constants STM322xG EVAL CAMERA Exported Constants
* @{
*/
#define CAMERA_I2C_ADDRESS 0x60
/**
* @}
*/
/** @defgroup STM322xG_EVAL_CAMERA_Exported_Functions STM322xG EVAL CAMERA Exported Functions
* @{
*/
uint8_t BSP_CAMERA_Init(uint32_t Resolution);
void BSP_CAMERA_ContinuousStart(uint8_t *buff);
void BSP_CAMERA_SnapshotStart(uint8_t *buff);
void BSP_CAMERA_Suspend(void);
void BSP_CAMERA_Resume(void);
uint8_t BSP_CAMERA_Stop(void);
void BSP_CAMERA_LineEventCallback(void);
void BSP_CAMERA_VsyncEventCallback(void);
void BSP_CAMERA_FrameEventCallback(void);
void BSP_CAMERA_ErrorCallback(void);
void BSP_CAMERA_MspInit(void);
/* Camera features functions prototype */
void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level);
void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode);
void BSP_CAMERA_ColorEffectConfig(uint32_t Effect);
/* To be called in DCMI_IRQHandler function */
void BSP_CAMERA_IRQHandler(void);
/* To be called in DMA2_Stream1_IRQHandler function */
void BSP_CAMERA_DMA_IRQHandler(void);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM322xG_EVAL_CAMERA_H */

View File

@ -1,389 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_eeprom.c
* @author MCD Application Team
* @brief This file provides a set of functions needed to manage an I2C M24C64
* EEPROM memory.
*
* ===================================================================
* Notes:
* - This driver is intended for STM32F2xx families devices only.
* - The I2C EEPROM memory (M24C64) is available on STM322xG-EVAL
* - To use this driver you have to connect the eeprom jumper (JP24).
* ===================================================================
*
* It implements a high level communication layer for read and write
* from/to this memory. The needed STM32F2xx hardware resources (I2C and
* GPIO) are defined in stm32f2xg_eval.h file, and the initialization is
* performed in EEPROM_IO_Init() function declared in stm32f2xg_eval.c
* file.
* You can easily tailor this driver to any other development board,
* by just adapting the defines for hardware resources and
* EEPROM_IO_Init() function.
*
* @note In this driver, basic read and write functions (BSP_EEPROM_ReadBuffer()
* and EEPROM_WritePage()) use Polling mode to perform the data transfer
* to/from EEPROM memory.
*
* +-----------------------------------------------------------------+
* | Pin assignment for M24C64 EEPROM |
* +---------------------------------------+-----------+-------------+
* | STM32F2xx I2C Pins | EEPROM | Pin |
* +---------------------------------------+-----------+-------------+
* | . | E0 | 1 (0V) |
* | . | E1 | 2 (0V) |
* | . | E2 | 3 (0V) |
* | . | VSS(GND)| 4 (0V) |
* | SDA | SDA | 5 |
* | SCL | SCL | 6 |
* | JP24 | /WS | 7 |
* | . | VDD | 8 (3.3V) |
* +---------------------------------------+-----------+-------------+
*
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval_eeprom.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @addtogroup STM322xG_EVAL_EEPROM STM322xG EVAL EEPROM
* @brief This file includes the I2C EEPROM driver of STM322xG-EVAL evaluation board.
* @{
*/
/** @defgroup STM322xG_EVAL_EEPROM_Private_Variables STM322xG EVAL EEPROM Private Variables
* @{
*/
__IO uint32_t EEPROMTimeout = EEPROM_READ_TIMEOUT;
__IO uint16_t EEPROMDataRead;
__IO uint8_t EEPROMDataWrite;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_EEPROM_Private_Function_Prototypes STM322xG EVAL EEPROM Private Function Prototypes
* @{
*/
static uint32_t EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite);
static uint32_t EEPROM_WaitEepromStandbyState(void);
/**
* @}
*/
/** @defgroup STM322xG_EVAL_EEPROM_Private_Functions STM322xG EVAL EEPROM Private Functions
* @{
*/
/**
* @brief Initializes peripherals used by the I2C EEPROM driver.
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
* different from EEPROM_OK (0)
*/
uint32_t BSP_EEPROM_Init(void)
{
/* I2C Initialization */
EEPROM_IO_Init();
/* Select the EEPROM address and check if OK */
if(EEPROM_IO_IsDeviceReady(EEPROM_I2C_ADDRESS, EEPROM_MAX_TRIALS) != HAL_OK)
{
return EEPROM_FAIL;
}
return EEPROM_OK;
}
/**
* @brief Reads a block of data from the EEPROM.
* @param pBuffer: pointer to the buffer that receives the data read from
* the EEPROM.
* @param ReadAddr: EEPROM's internal address to start reading from.
* @param NumByteToRead: pointer to the variable holding number of bytes to
* be read from the EEPROM.
*
* @note The variable pointed by NumByteToRead is reset to 0 when all the
* data are read from the EEPROM. Application should monitor this
* variable in order know when the transfer is complete.
*
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
* different from EEPROM_OK (0) or the timeout user callback.
*/
uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead)
{
uint32_t buffersize = *NumByteToRead;
/* Set the pointer to the Number of data to be read */
EEPROMDataRead = *NumByteToRead;
if(EEPROM_IO_ReadData(EEPROM_I2C_ADDRESS, ReadAddr, pBuffer, buffersize) != HAL_OK)
{
BSP_EEPROM_TIMEOUT_UserCallback();
return EEPROM_FAIL;
}
/* If all operations OK, return EEPROM_OK (0) */
return EEPROM_OK;
}
/**
* @brief Writes buffer of data to the I2C EEPROM.
* @param pBuffer: pointer to the buffer containing the data to be written
* to the EEPROM.
* @param WriteAddr: EEPROM's internal address to write to.
* @param NumByteToWrite: number of bytes to write to the EEPROM.
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
* different from EEPROM_OK (0) or the timeout user callback.
*/
uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite)
{
uint8_t numofpage = 0, numofsingle = 0, count = 0;
uint16_t addr = 0;
uint8_t dataindex = 0;
uint32_t status = EEPROM_OK;
addr = WriteAddr % EEPROM_PAGESIZE;
count = EEPROM_PAGESIZE - addr;
numofpage = NumByteToWrite / EEPROM_PAGESIZE;
numofsingle = NumByteToWrite % EEPROM_PAGESIZE;
/* If WriteAddr is EEPROM_PAGESIZE aligned */
if(addr == 0)
{
/* If NumByteToWrite < EEPROM_PAGESIZE */
if(numofpage == 0)
{
/* Store the number of data to be written */
dataindex = numofsingle;
/* Start writing data */
status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
if(status != EEPROM_OK)
{
return status;
}
}
/* If NumByteToWrite > EEPROM_PAGESIZE */
else
{
while(numofpage--)
{
/* Store the number of data to be written */
dataindex = EEPROM_PAGESIZE;
status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
if(status != EEPROM_OK)
{
return status;
}
WriteAddr += EEPROM_PAGESIZE;
pBuffer += EEPROM_PAGESIZE;
}
if(numofsingle!=0)
{
/* Store the number of data to be written */
dataindex = numofsingle;
status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
if(status != EEPROM_OK)
{
return status;
}
}
}
}
/* If WriteAddr is not EEPROM_PAGESIZE aligned */
else
{
/* If NumByteToWrite < EEPROM_PAGESIZE */
if(numofpage == 0)
{
/* If the number of data to be written is more than the remaining space
in the current page: */
if(NumByteToWrite > count)
{
/* Store the number of data to be written */
dataindex = count;
/* Write the data contained in same page */
status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
if(status != EEPROM_OK)
{
return status;
}
/* Store the number of data to be written */
dataindex = (NumByteToWrite - count);
/* Write the remaining data in the following page */
status = EEPROM_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&dataindex));
if(status != EEPROM_OK)
{
return status;
}
}
else
{
/* Store the number of data to be written */
dataindex = numofsingle;
status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
if(status != EEPROM_OK)
{
return status;
}
}
}
/* If NumByteToWrite > EEPROM_PAGESIZE */
else
{
NumByteToWrite -= count;
numofpage = NumByteToWrite / EEPROM_PAGESIZE;
numofsingle = NumByteToWrite % EEPROM_PAGESIZE;
if(count != 0)
{
/* Store the number of data to be written */
dataindex = count;
status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
if(status != EEPROM_OK)
{
return status;
}
WriteAddr += count;
pBuffer += count;
}
while(numofpage--)
{
/* Store the number of data to be written */
dataindex = EEPROM_PAGESIZE;
status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
if(status != EEPROM_OK)
{
return status;
}
WriteAddr += EEPROM_PAGESIZE;
pBuffer += EEPROM_PAGESIZE;
}
if(numofsingle != 0)
{
/* Store the number of data to be written */
dataindex = numofsingle;
status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
if(status != EEPROM_OK)
{
return status;
}
}
}
}
/* If all operations OK, return EEPROM_OK (0) */
return EEPROM_OK;
}
/**
* @brief Writes more than one byte to the EEPROM with a single WRITE cycle.
*
* @note The number of bytes (combined to write start address) must not
* cross the EEPROM page boundary. This function can only write into
* the boundaries of an EEPROM page.
* This function doesn't check on boundaries condition (in this driver
* the function BSP_EEPROM_WriteBuffer() which calls EEPROM_WritePage() is
* responsible of checking on Page boundaries).
*
* @param pBuffer: pointer to the buffer containing the data to be written to
* the EEPROM.
* @param WriteAddr: EEPROM's internal address to write to.
* @param NumByteToWrite: pointer to the variable holding number of bytes to
* be written into the EEPROM.
*
* @note The variable pointed by NumByteToWrite is reset to 0 when all the
* data are written to the EEPROM. Application should monitor this
* variable in order know when the transfer is complete.
*
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
* different from EEPROM_OK (0) or the timeout user callback.
*/
static uint32_t EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite)
{
uint32_t buffersize = *NumByteToWrite;
uint32_t status = EEPROM_OK;
/* Set the pointer to the Number of data to be written */
EEPROMDataWrite = *NumByteToWrite;
if(EEPROM_IO_WriteData(EEPROM_I2C_ADDRESS, WriteAddr, pBuffer, buffersize) != HAL_OK)
{
BSP_EEPROM_TIMEOUT_UserCallback();
status = EEPROM_FAIL;
}
while(EEPROM_WaitEepromStandbyState() != EEPROM_OK)
{
return EEPROM_FAIL;
}
/* If all operations OK, return EEPROM_OK (0) */
return status;
}
/**
* @brief Waits for EEPROM Standby state.
*
* @note This function allows to wait and check that EEPROM has finished the
* last operation. It is mostly used after Write operation: after receiving
* the buffer to be written, the EEPROM may need additional time to actually
* perform the write operation. During this time, it doesn't answer to
* I2C packets addressed to it. Once the write operation is complete
* the EEPROM responds to its address.
*
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
* different from EEPROM_OK (0) or the timeout user callback.
*/
static uint32_t EEPROM_WaitEepromStandbyState(void)
{
/* Check if the maximum allowed number of trials has bee reached */
if(EEPROM_IO_IsDeviceReady(EEPROM_I2C_ADDRESS, EEPROM_MAX_TRIALS) != HAL_OK)
{
/* If the maximum number of trials has been reached, exit the function */
BSP_EEPROM_TIMEOUT_UserCallback();
return EEPROM_TIMEOUT;
}
return EEPROM_OK;
}
/**
* @brief Basic management of the timeout situation.
*/
__weak void BSP_EEPROM_TIMEOUT_UserCallback(void)
{
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,108 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_eeprom.h
* @author MCD Application Team
* @brief This file contains all the functions prototypes for
* the stm322xg_eval_eeprom.c firmware driver.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM322xG_EVAL_EEPROM_H
#define __STM322xG_EVAL_EEPROM_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @addtogroup STM322xG_EVAL_EEPROM
* @brief This file includes the I2C EEPROM driver of STM322xG-EVAL evaluation board.
* @{
*/
/** @defgroup STM322xG_EVAL_EEPROM_Exported_Constants STM322xG EVAL EEPROM Exported Constants
* @{
*/
/* EEPROM hardware address and page size */
#define EEPROM_PAGESIZE 32
#define EEPROM_MAX_SIZE 0x2000 /* 64Kbit*/
/* Maximum Timeout values for flags and events waiting loops: This timeout is based
on systick set to 1ms.
Timeout for read based if read all the EEPROM: EEPROM_MAX_SIZE * BSP_I2C_SPEED (640ms) */
#define EEPROM_READ_TIMEOUT ((uint32_t)(1000))
/* Timeout for write based on max write which is EEPROM_PAGESIZE bytes: EEPROM_PAGESIZE * BSP_I2C_SPEED (320us)*/
#define EEPROM_WRITE_TIMEOUT ((uint32_t)(1000))
/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */
#define EEPROM_MAX_TRIALS 3000
#define EEPROM_OK 0
#define EEPROM_FAIL 1
#define EEPROM_TIMEOUT 2
/**
* @}
*/
/** @defgroup STM322xG_EVAL_EEPROM_Exported_Functions STM322xG EVAL EEPROM Exported Functions
* @{
*/
uint32_t BSP_EEPROM_Init(void);
uint32_t BSP_EEPROM_ReadBuffer(uint8_t *pBuffer, uint16_t ReadAddr, uint16_t *NumByteToRead);
uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite);
/* USER Callbacks: This function is declared as __weak in EEPROM driver and
should be implemented into user application.
BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition
occurs during communication (waiting on an event that doesn't occur, bus
errors, busy devices ...). */
void BSP_EEPROM_TIMEOUT_UserCallback(void);
/* Link function for I2C EEPROM peripheral */
void EEPROM_IO_Init(void);
HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM322xG_EVAL_EEPROM_H */

View File

@ -1,215 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_io.c
* @author MCD Application Team
* @brief This file provides a set of functions needed to manage the IO pins
* on STM322xG-EVAL evaluation board.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* File Info : -----------------------------------------------------------------
User NOTES
1. How To use this driver:
--------------------------
- This driver is used to drive the IO module of the STM322xG-EVAL evaluation
board.
- The STMPE811 IO expander device component driver must be included with this
driver in order to run the IO functionalities commanded by the IO expander
device mounted on the evaluation board.
2. Driver description:
---------------------
+ Initialization steps:
o Initialize the IO module using the BSP_IO_Init() function. This
function includes the MSP layer hardware resources initialization and the
communication layer configuration to start the IO functionalities use.
+ IO functionalities use
o The IO pin mode is configured when calling the function BSP_IO_ConfigPin(), you
must specify the desired IO mode by choosing the "IO_ModeTypedef" parameter
predefined value.
o If an IO pin is used in interrupt mode, the function BSP_IO_ITGetStatus() is
needed to get the interrupt status. To clear the IT pending bits, you should
call the function BSP_IO_ITClear() with specifying the IO pending bit to clear.
o The IT is handled using the corresponding external interrupt IRQ handler,
the user IT callback treatment is implemented on the same external interrupt
callback.
o To get/set an IO pin combination state you can use the functions
BSP_IO_ReadPin()/BSP_IO_WritePin() or the function BSP_IO_TogglePin() to toggle the pin
state.
------------------------------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval_io.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @defgroup STM322xG_EVAL_IO STM322xG EVAL IO
* @{
*/
/** @defgroup STM322xG_EVAL_IO_Private_Types_Definitions STM322xG EVAL IO Private Types Definitions
* @{
*/
/**
* @}
*/
/** @defgroup STM322xG_EVAL_IO_Private_Variables STM322xG EVAL IO Private Variables
* @{
*/
static IO_DrvTypeDef *io_driver;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_IO_Private_Functions STM3222xG EVAL IO Private Functions
* @{
*/
/**
* @brief Initializes and configures the IO functionalities and configures all
* necessary hardware resources (GPIOs, clocks..).
* @note BSP_IO_Init() is using HAL_Delay() function to ensure that stmpe811
* IO Expander is correctly reset. HAL_Delay() function provides accurate
* delay (in milliseconds) based on variable incremented in SysTick ISR.
* This implies that if BSP_IO_Init() is called from a peripheral ISR process,
* then the SysTick interrupt must have higher priority (numerically lower)
* than the peripheral interrupt. Otherwise the caller ISR process will be blocked.
* @retval IO_OK: if all initializations are OK. Other value if error.
*/
uint8_t BSP_IO_Init(void)
{
uint8_t ret = IO_ERROR;
if(stmpe811_io_drv.ReadID(IO_I2C_ADDRESS) == STMPE811_ID)
{
/* Initialize the IO driver structure */
io_driver = &stmpe811_io_drv;
io_driver->Init(IO_I2C_ADDRESS);
io_driver->Start(IO_I2C_ADDRESS, IO_PIN_ALL);
ret = IO_OK;
}
return ret;
}
/**
* @brief Gets the selected pins IT status.
* @param IO_Pin: Selected pins to check the status.
* This parameter can be any combination of the IO pins.
* @retval IO_OK: if read status OK. Other value if error.
*/
uint8_t BSP_IO_ITGetStatus(uint16_t IO_Pin)
{
/* Return the IO Pin IT status */
return (io_driver->ITStatus(IO_I2C_ADDRESS, IO_Pin));
}
/**
* @brief Clears the selected IO IT pending bit.
* @param IO_Pin: Selected pins to check the status.
* This parameter can be any combination of the IO pins.
*/
void BSP_IO_ITClear(uint16_t IO_Pin)
{
io_driver->ClearIT(IO_I2C_ADDRESS, IO_Pin);
}
/**
* @brief Configures the IO pin(s) according to IO mode structure value.
* @param IO_Pin: Output pin to be set or reset.
* This parameter can be one of the following values:
* @arg STMPE811_PIN_x: where x can be from 0 to 7
* @param IO_Mode: IO pin mode to configure
* This parameter can be one of the following values:
* @arg IO_MODE_INPUT
* @arg IO_MODE_OUTPUT
* @arg IO_MODE_IT_RISING_EDGE
* @arg IO_MODE_IT_FALLING_EDGE
* @arg IO_MODE_IT_LOW_LEVEL
* @arg IO_MODE_IT_HIGH_LEVEL
* @retval IO_OK: if all initializations are OK. Other value if error.
*/
uint8_t BSP_IO_ConfigPin(uint16_t IO_Pin, IO_ModeTypedef IO_Mode)
{
/* Configure the selected IO pin(s) mode */
io_driver->Config(IO_I2C_ADDRESS, IO_Pin, IO_Mode);
return IO_OK;
}
/**
* @brief Sets the selected pins state.
* @param IO_Pin: Selected pins to write.
* This parameter can be any combination of the IO pins.
* @param PinState: New pins state to write
*/
void BSP_IO_WritePin(uint16_t IO_Pin, uint8_t PinState)
{
io_driver->WritePin(IO_I2C_ADDRESS, IO_Pin, PinState);
}
/**
* @brief Gets the selected pins current state.
* @param IO_Pin: Selected pins to read.
* This parameter can be any combination of the IO pins.
* @retval The current pins state
*/
uint16_t BSP_IO_ReadPin(uint16_t IO_Pin)
{
return(io_driver->ReadPin(IO_I2C_ADDRESS, IO_Pin));
}
/**
* @brief Toggles the selected pins state
* @param IO_Pin: Selected pins to toggle.
* This parameter can be any combination of the IO pins.
*/
void BSP_IO_TogglePin(uint16_t IO_Pin)
{
if(io_driver->ReadPin(IO_I2C_ADDRESS, IO_Pin) == 1) /* Set */
{
io_driver->WritePin(IO_I2C_ADDRESS, IO_Pin, 0); /* Reset */
}
else
{
io_driver->WritePin(IO_I2C_ADDRESS, IO_Pin, 1); /* Set */
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,106 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_io.h
* @author MCD Application Team
* @brief This file contains the common defines and functions prototypes for
* the stm322xg_eval_io.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM322xG_EVAL_IO_H
#define __STM322xG_EVAL_IO_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval.h"
/* Include IO component driver */
#include "../Components/stmpe811/stmpe811.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @defgroup STM322xG_EVAL_IO STM322xG EVAL IO
* @{
*/
/** @defgroup STM322xG_EVAL_IO_Exported_Types STM322xG EVAL IO Exported Types
* @{
*/
typedef enum
{
IO_OK = 0x00,
IO_ERROR = 0x01,
IO_TIMEOUT = 0x02
}IO_StatusTypeDef;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_IO_Exported_Constants STM322xG EVAL IO Exported Constants
* @{
*/
#define IO_PIN_0 0x01
#define IO_PIN_1 0x02
#define IO_PIN_2 0x04
#define IO_PIN_3 0x08
#define IO_PIN_4 0x10
#define IO_PIN_5 0x20
#define IO_PIN_6 0x40
#define IO_PIN_7 0x80
#define IO_PIN_ALL 0xFF
/**
* @}
*/
/** @defgroup STM322xG_EVAL_IO_Exported_Functions STM322xG EVAL IO Exported Functions
* @{
*/
uint8_t BSP_IO_Init(void);
void BSP_IO_ITClear(uint16_t IO_Pin);
uint8_t BSP_IO_ITGetStatus(uint16_t IO_Pin);
uint8_t BSP_IO_ConfigPin(uint16_t IO_Pin, IO_ModeTypedef IO_Mode);
void BSP_IO_WritePin(uint16_t IO_Pin, uint8_t PinState);
uint16_t BSP_IO_ReadPin(uint16_t IO_Pin);
void BSP_IO_TogglePin(uint16_t IO_Pin);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM322xG_EVAL_IO_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,182 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_lcd.h
* @author MCD Application Team
* @brief This file contains the common defines and functions prototypes for
* the stm322xg_eval_lcd.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM322XG_EVAL_LCD_H
#define __STM322XG_EVAL_LCD_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval.h"
#include "../Components/ili9325/ili9325.h"
#include "../Components/ili9320/ili9320.h"
#include "../../../Utilities/Fonts/fonts.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @addtogroup STM322xG_EVAL_LCD
* @{
*/
/** @defgroup STM322xG_EVAL_LCD_Exported_Types STM322xG EVAL LCD Exported Types
* @{
*/
typedef struct
{
uint32_t TextColor;
uint32_t BackColor;
sFONT *pFont;
}LCD_DrawPropTypeDef;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_LCD_Exported_Constants STM322xG EVAL LCD Exported Constants
* @{
*/
/**
* @brief LCD status structure definition
*/
#define LCD_OK 0x00
#define LCD_ERROR 0x01
#define LCD_TIMEOUT 0x02
typedef struct
{
int16_t X;
int16_t Y;
}Point, * pPoint;
/**
* @brief Line mode structures definition
*/
typedef enum
{
CENTER_MODE = 0x01, /* Center mode */
RIGHT_MODE = 0x02, /* Right mode */
LEFT_MODE = 0x03 /* Left mode */
}Line_ModeTypdef;
/**
* @brief LCD color
*/
#define LCD_COLOR_BLUE 0x001F
#define LCD_COLOR_GREEN 0x07E0
#define LCD_COLOR_RED 0xF800
#define LCD_COLOR_CYAN 0x07FF
#define LCD_COLOR_MAGENTA 0xF81F
#define LCD_COLOR_YELLOW 0xFFE0
#define LCD_COLOR_LIGHTBLUE 0x841F
#define LCD_COLOR_LIGHTGREEN 0x87F0
#define LCD_COLOR_LIGHTRED 0xFC10
#define LCD_COLOR_LIGHTCYAN 0x87FF
#define LCD_COLOR_LIGHTMAGENTA 0xFC1F
#define LCD_COLOR_LIGHTYELLOW 0xFFF0
#define LCD_COLOR_DARKBLUE 0x0010
#define LCD_COLOR_DARKGREEN 0x0400
#define LCD_COLOR_DARKRED 0x8000
#define LCD_COLOR_DARKCYAN 0x0410
#define LCD_COLOR_DARKMAGENTA 0x8010
#define LCD_COLOR_DARKYELLOW 0x8400
#define LCD_COLOR_WHITE 0xFFFF
#define LCD_COLOR_LIGHTGRAY 0xD69A
#define LCD_COLOR_GRAY 0x8410
#define LCD_COLOR_DARKGRAY 0x4208
#define LCD_COLOR_BLACK 0x0000
#define LCD_COLOR_BROWN 0xA145
#define LCD_COLOR_ORANGE 0xFD20
/**
* @brief LCD default font
*/
#define LCD_DEFAULT_FONT Font24
/**
* @}
*/
/** @defgroup STM322xG_EVAL_LCD_Exported_Functions STM322xG EVAL LCD Exported Functions
* @{
*/
uint8_t BSP_LCD_Init(void);
uint32_t BSP_LCD_GetXSize(void);
uint32_t BSP_LCD_GetYSize(void);
uint16_t BSP_LCD_GetTextColor(void);
uint16_t BSP_LCD_GetBackColor(void);
void BSP_LCD_SetTextColor(__IO uint16_t Color);
void BSP_LCD_SetBackColor(__IO uint16_t Color);
void BSP_LCD_SetFont(sFONT *fonts);
sFONT *BSP_LCD_GetFont(void);
void BSP_LCD_Clear(uint16_t Color);
void BSP_LCD_ClearStringLine(uint16_t Line);
void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr);
void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Line_ModeTypdef Mode);
void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii);
uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos);
void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code);
void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount);
void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp);
void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pbmp);
void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount);
void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
void BSP_LCD_DisplayOff(void);
void BSP_LCD_DisplayOn(void);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM322XG_EVAL_LCD_H */

View File

@ -1,499 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_sd.c
* @author MCD Application Team
* @brief This file includes the uSD card driver mounted on STM322xG-EVAL
* evaluation board.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* File Info : -----------------------------------------------------------------
User NOTES
1. How To use this driver:
--------------------------
- This driver is used to drive the micro SD external card mounted on STM322xG-EVAL
evaluation board.
- This driver does not need a specific component driver for the micro SD device
to be included with.
2. Driver description:
---------------------
+ Initialization steps:
o Initialize the micro SD card using the BSP_SD_Init() function. This
function includes the MSP layer hardware resources initialization and the
SDIO interface configuration to interface with the external micro SD. It
also includes the micro SD initialization sequence.
o To check the SD card presence you can use the function BSP_SD_IsDetected() which
returns the detection status
o If SD presence detection interrupt mode is desired, you must configure the
SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt
is generated as an external interrupt whenever the micro SD card is
plugged/unplugged in/from the evaluation board. The SD detection interrupt
is handled by calling the function BSP_SD_DetectIT() which is called in the IRQ
handler file, the user callback is implemented in the function BSP_SD_DetectCallback().
o The function BSP_SD_GetCardInfo() is used to get the micro SD card information
which is stored in the structure "HAL_SD_CardInfoTypedef".
+ Micro SD card operations
o The micro SD card can be accessed with read/write block(s) operations once
it is ready for access. The access can be performed whether using the polling
mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA
transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA()
o The DMA transfer complete is used with interrupt mode. Once the SD transfer
is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(),
the DMA Tx/Rx transfer complete are handled using the functions
BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks
are implemented by the user at application level.
o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying
the number of blocks to erase.
o The SD runtime status is returned when calling the function BSP_SD_GetCardState().
------------------------------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval_sd.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @defgroup STM322xG_EVAL_SD STM322xG EVAL SD
* @{
*/
/** @defgroup STM322xG_EVAL_SD_Private_Variables STM322xG EVAL SD Private Variables
* @{
*/
SD_HandleTypeDef uSdHandle;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_SD_Private_Functions STM322xG EVAL SD Private Functions
* @{
*/
/**
* @brief Initializes the SD card device.
* @retval SD status.
*/
uint8_t BSP_SD_Init(void)
{
uint8_t SD_state = MSD_OK;
/* uSD device interface configuration */
uSdHandle.Instance = SDIO;
uSdHandle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
uSdHandle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
uSdHandle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
uSdHandle.Init.BusWide = SDIO_BUS_WIDE_1B;
uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
uSdHandle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV;
/* Check if the SD card is plugged in the slot */
if(BSP_SD_IsDetected() != SD_PRESENT)
{
return MSD_ERROR;
}
/* Msp SD initialization */
BSP_SD_MspInit(&uSdHandle, NULL);
if(HAL_SD_Init(&uSdHandle) != HAL_OK)
{
SD_state = MSD_ERROR;
}
/* Configure SD Bus width */
if(SD_state == MSD_OK)
{
/* Enable wide operation */
if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK)
{
SD_state = MSD_ERROR;
}
else
{
SD_state = MSD_OK;
}
}
return SD_state;
}
/**
* @brief Configures Interrupt mode for SD detection pin.
* @retval Returns 0
*/
uint8_t BSP_SD_ITConfig(void)
{
GPIO_InitTypeDef GPIO_Init_Structure;
/* Configure Interrupt mode for SD detection pin */
GPIO_Init_Structure.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_Init_Structure.Pull = GPIO_PULLUP;
GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH;
GPIO_Init_Structure.Pin = SD_DETECT_PIN;
HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_Init_Structure);
/* NVIC configuration for SDIO interrupts */
HAL_NVIC_SetPriority(SD_DETECT_IRQn, 0x0E, 0);
HAL_NVIC_EnableIRQ(SD_DETECT_IRQn);
return 0;
}
/**
* @brief Detects if SD card is correctly plugged in the memory slot or not.
* @retval Returns if SD is detected or not
*/
uint8_t BSP_SD_IsDetected(void)
{
__IO uint8_t status = SD_PRESENT;
/* Check SD card detect pin */
if(HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != GPIO_PIN_RESET)
{
status = SD_NOT_PRESENT;
}
return status;
}
/**
* @brief SD detect IT treatment
*/
void BSP_SD_DetectIT(void)
{
/* SD detect IT callback */
BSP_SD_DetectCallback();
}
/**
* @brief SD detect IT detection callback
*/
__weak void BSP_SD_DetectCallback(void)
{
/* NOTE: This function Should not be modified, when the callback is needed,
the BSP_SD_DetectCallback could be implemented in the user file
*/
}
/**
* @brief Reads block(s) from a specified address in an SD card, in polling mode.
* @param pData: Pointer to the buffer that will contain the data to transmit
* @param ReadAddr: Address from where data is to be read
* @param NumOfBlocks: Number of SD blocks to read
* @param Timeout: Timeout for read operation
* @retval SD status
*/
uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout)
{
if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK)
{
return MSD_ERROR;
}
else
{
return MSD_OK;
}
}
/**
* @brief Writes block(s) to a specified address in an SD card, in polling mode.
* @param pData: Pointer to the buffer that will contain the data to transmit
* @param WriteAddr: Address from where data is to be written
* @param NumOfBlocks: Number of SD blocks to write
* @param Timeout: Timeout for write operation
* @retval SD status
*/
uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout)
{
if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK)
{
return MSD_ERROR;
}
else
{
return MSD_OK;
}
}
/**
* @brief Reads block(s) from a specified address in an SD card, in DMA mode.
* @param pData: Pointer to the buffer that will contain the data to transmit
* @param ReadAddr: Address from where data is to be read
* @param NumOfBlocks: Number of SD blocks to read
* @retval SD status
*/
uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks)
{
/* Read block(s) in DMA transfer mode */
if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK)
{
return MSD_ERROR;
}
else
{
return MSD_OK;
}
}
/**
* @brief Writes block(s) to a specified address in an SD card, in DMA mode.
* @param pData: Pointer to the buffer that will contain the data to transmit
* @param WriteAddr: Address from where data is to be written
* @param NumOfBlocks: Number of SD blocks to write
* @retval SD status
*/
uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks)
{
/* Write block(s) in DMA transfer mode */
if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK)
{
return MSD_ERROR;
}
else
{
return MSD_OK;
}
}
/**
* @brief Erases the specified memory area of the given SD card.
* @param StartAddr: Start byte address
* @param EndAddr: End byte address
* @retval SD status
*/
uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr)
{
if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK)
{
return MSD_ERROR;
}
else
{
return MSD_OK;
}
}
/**
* @brief Initializes the SD MSP.
* @param hsd: SD handle
* @param Params : pointer on additional configuration parameters, can be NULL.
*/
__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params)
{
static DMA_HandleTypeDef dmaRxHandle;
static DMA_HandleTypeDef dmaTxHandle;
GPIO_InitTypeDef GPIO_Init_Structure;
/* Enable SDIO clock */
__HAL_RCC_SDIO_CLK_ENABLE();
/* Enable DMA2 clocks */
__DMAx_TxRx_CLK_ENABLE();
/* Enable GPIOs clock */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__SD_DETECT_GPIO_CLK_ENABLE();
/* Common GPIO configuration */
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_PULLUP;
GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF12_SDIO;
/* GPIOC configuration */
GPIO_Init_Structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12;
HAL_GPIO_Init(GPIOC, &GPIO_Init_Structure);
/* GPIOD configuration */
GPIO_Init_Structure.Pin = GPIO_PIN_2;
HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure);
/* SD Card detect pin configuration */
GPIO_Init_Structure.Mode = GPIO_MODE_INPUT;
GPIO_Init_Structure.Pull = GPIO_PULLUP;
GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH;
GPIO_Init_Structure.Pin = SD_DETECT_PIN;
HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_Init_Structure);
/* NVIC configuration for SDIO interrupts */
HAL_NVIC_SetPriority(SDIO_IRQn, 0x0E, 0);
HAL_NVIC_EnableIRQ(SDIO_IRQn);
/* Configure DMA Rx parameters */
dmaRxHandle.Init.Channel = SD_DMAx_Rx_CHANNEL;
dmaRxHandle.Init.Direction = DMA_PERIPH_TO_MEMORY;
dmaRxHandle.Init.PeriphInc = DMA_PINC_DISABLE;
dmaRxHandle.Init.MemInc = DMA_MINC_ENABLE;
dmaRxHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
dmaRxHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
dmaRxHandle.Init.Mode = DMA_PFCTRL;
dmaRxHandle.Init.Priority = DMA_PRIORITY_VERY_HIGH;
dmaRxHandle.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
dmaRxHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
dmaRxHandle.Init.MemBurst = DMA_MBURST_INC4;
dmaRxHandle.Init.PeriphBurst = DMA_PBURST_INC4;
dmaRxHandle.Instance = SD_DMAx_Rx_STREAM;
/* Associate the DMA handle */
__HAL_LINKDMA(hsd, hdmarx, dmaRxHandle);
/* Deinitialize the stream for new transfer */
HAL_DMA_DeInit(&dmaRxHandle);
/* Configure the DMA stream */
HAL_DMA_Init(&dmaRxHandle);
/* Configure DMA Tx parameters */
dmaTxHandle.Init.Channel = SD_DMAx_Tx_CHANNEL;
dmaTxHandle.Init.Direction = DMA_MEMORY_TO_PERIPH;
dmaTxHandle.Init.PeriphInc = DMA_PINC_DISABLE;
dmaTxHandle.Init.MemInc = DMA_MINC_ENABLE;
dmaTxHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
dmaTxHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
dmaTxHandle.Init.Mode = DMA_PFCTRL;
dmaTxHandle.Init.Priority = DMA_PRIORITY_VERY_HIGH;
dmaTxHandle.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
dmaTxHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
dmaTxHandle.Init.MemBurst = DMA_MBURST_INC4;
dmaTxHandle.Init.PeriphBurst = DMA_PBURST_INC4;
dmaTxHandle.Instance = SD_DMAx_Tx_STREAM;
/* Associate the DMA handle */
__HAL_LINKDMA(hsd, hdmatx, dmaTxHandle);
/* Deinitialize the stream for new transfer */
HAL_DMA_DeInit(&dmaTxHandle);
/* Configure the DMA stream */
HAL_DMA_Init(&dmaTxHandle);
/* NVIC configuration for DMA transfer complete interrupt */
HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0);
HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn);
/* NVIC configuration for DMA transfer complete interrupt */
HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0);
HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn);
}
/**
* @brief Gets the current SD card data status.
* @retval Data transfer state.
* This value can be one of the following values:
* @arg SD_TRANSFER_OK: No data transfer is acting
* @arg SD_TRANSFER_BUSY: Data transfer is acting
*/
uint8_t BSP_SD_GetCardState(void)
{
return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY);
}
/**
* @brief Get SD information about specific SD card.
* @param CardInfo: Pointer to HAL_SD_CardInfoTypedef structure
* @retval None
*/
void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo)
{
/* Get SD card Information */
HAL_SD_GetCardInfo(&uSdHandle, CardInfo);
}
/**
* @brief SD Abort callbacks
* @param hsd: SD handle
* @retval None
*/
void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd)
{
BSP_SD_AbortCallback();
}
/**
* @brief Tx Transfer completed callbacks
* @param hsd: SD handle
* @retval None
*/
void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)
{
BSP_SD_WriteCpltCallback();
}
/**
* @brief Rx Transfer completed callbacks
* @param hsd: SD handle
* @retval None
*/
void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)
{
BSP_SD_ReadCpltCallback();
}
/**
* @brief BSP SD Abort callbacks
* @retval None
*/
__weak void BSP_SD_AbortCallback(void)
{
}
/**
* @brief BSP Tx Transfer completed callbacks
* @retval None
*/
__weak void BSP_SD_WriteCpltCallback(void)
{
}
/**
* @brief BSP Rx Transfer completed callbacks
* @retval None
*/
__weak void BSP_SD_ReadCpltCallback(void)
{
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,144 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_sd.h
* @author MCD Application Team
* @brief This file contains the common defines and functions prototypes for
* the stm322xg_eval_sd.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM322xG_EVAL_SD_H
#define __STM322xG_EVAL_SD_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f2xx_hal.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @addtogroup STM322xG_EVAL_SD
* @{
*/
/** @defgroup STM322xG_EVAL_SD_Exported_Types STM322xG EVAL SD Exported Types
* @{
*/
/**
* @brief SD Card information structure
*/
#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef
/**
* @}
*/
/** @defgroup STM322xG_EVAL_SD_Exported_Constants STM322xG EVAL SD Exported Constants
* @{
*/
/**
* @brief SD status structure definition
*/
#define MSD_OK ((uint8_t)0x00)
#define MSD_ERROR ((uint8_t)0x01)
/**
* @brief SD transfer state definition
*/
#define SD_TRANSFER_OK ((uint8_t)0x00)
#define SD_TRANSFER_BUSY ((uint8_t)0x01)
#define SD_DETECT_PIN GPIO_PIN_13
#define SD_DETECT_GPIO_PORT GPIOH
#define __SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOH_CLK_ENABLE()
#define SD_DETECT_IRQn EXTI15_10_IRQn
#define SD_DATATIMEOUT ((uint32_t)100000000)
#define SD_PRESENT ((uint8_t)0x01)
#define SD_NOT_PRESENT ((uint8_t)0x00)
/* DMA definitions for SD DMA transfer */
#define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE
#define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4
#define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4
#define SD_DMAx_Tx_STREAM DMA2_Stream6
#define SD_DMAx_Rx_STREAM DMA2_Stream3
#define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn
#define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn
#define BSP_SD_IRQHandler SDIO_IRQHandler
#define BSP_SD_DMA_Tx_IRQHandler DMA2_Stream6_IRQHandler
#define BSP_SD_DMA_Rx_IRQHandler DMA2_Stream3_IRQHandler
#define SD_DetectIRQHandler() HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13)
/**
* @}
*/
/** @defgroup STM322xG_EVAL_SD_Exported_Functions STM322xG EVAL SD Exported Functions
* @{
*/
uint8_t BSP_SD_Init(void);
uint8_t BSP_SD_ITConfig(void);
void BSP_SD_DetectIT(void);
void BSP_SD_DetectCallback(void);
uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout);
uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks);
uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks);
uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr);
uint8_t BSP_SD_GetCardState(void);
void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo);
uint8_t BSP_SD_IsDetected(void);
/* These functions can be modified in case the current settings (e.g. DMA stream)
need to be changed for specific application needs */
void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params);
void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params);
void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params);
void BSP_SD_AbortCallback(void);
void BSP_SD_WriteCpltCallback(void);
void BSP_SD_ReadCpltCallback(void);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM322xG_EVAL_SD_H */

View File

@ -1,307 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_sram.c
* @author MCD Application Team
* @brief This file includes the SRAM driver for the IS61WV102416BLL-10MLI memory
* device mounted on STM322xG-EVAL evaluation board.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* File Info : -----------------------------------------------------------------
User NOTES
1. How To use this driver:
--------------------------
- This driver is used to drive the IS61WV102416BLL-10MLI SRAM external memory mounted
on STM322xG-EVAL evaluation board.
- This driver does not need a specific component driver for the SRAM device
to be included with.
2. Driver description:
---------------------
+ Initialization steps:
o Initialize the SRAM external memory using the BSP_SRAM_Init() function. This
function includes the MSP layer hardware resources initialization and the
FSMC controller configuration to interface with the external SRAM memory.
+ SRAM read/write operations
o SRAM external memory can be accessed with read/write operations once it is
initialized.
Read/write operation can be performed with AHB access using the functions
BSP_SRAM_ReadData()/BSP_SRAM_WriteData(), or by DMA transfer using the functions
BSP_SRAM_ReadData_DMA()/BSP_SRAM_WriteData_DMA().
o The AHB access is performed with 16-bit width transaction, the DMA transfer
configuration is fixed at single (no burst) halfword transfer
(see the SRAM_MspInit() static function).
o User can implement his own functions for read/write access with his desired
configurations.
o If interrupt mode is used for DMA transfer, the function BSP_SRAM_DMA_IRQHandler()
is called in IRQ handler file, to serve the generated interrupt once the DMA
transfer is complete.
------------------------------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval_sram.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @defgroup STM322xG_EVAL_SRAM STM322xG EVAL SRAM
* @{
*/
/** @defgroup STM322xG_EVAL_SRAM_Private_Variables STM322xG EVAL SRAM Private Variables
* @{
*/
static SRAM_HandleTypeDef sramHandle;
static FSMC_NORSRAM_TimingTypeDef Timing;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_SRAM_Private_Functions STM322xG EVAL SRAM Private Functions
* @{
*/
/**
* @brief Initializes the SRAM device.
* @retval SRAM status
*/
uint8_t BSP_SRAM_Init(void)
{
sramHandle.Instance = FSMC_NORSRAM_DEVICE;
sramHandle.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
/* SRAM device configuration */
Timing.AddressSetupTime = 2;
Timing.AddressHoldTime = 1;
Timing.DataSetupTime = 2;
Timing.BusTurnAroundDuration = 1;
Timing.CLKDivision = 2;
Timing.DataLatency = 2;
Timing.AccessMode = FSMC_ACCESS_MODE_A;
sramHandle.Init.NSBank = FSMC_NORSRAM_BANK2;
sramHandle.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
sramHandle.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
sramHandle.Init.MemoryDataWidth = SRAM_MEMORY_WIDTH;
sramHandle.Init.BurstAccessMode = SRAM_BURSTACCESS;
sramHandle.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
sramHandle.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
sramHandle.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
sramHandle.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
sramHandle.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
sramHandle.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
sramHandle.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
sramHandle.Init.WriteBurst = SRAM_WRITEBURST;
/* SRAM controller initialization */
BSP_SRAM_MspInit();
if(HAL_SRAM_Init(&sramHandle, &Timing, &Timing) != HAL_OK)
{
return SRAM_ERROR;
}
else
{
return SRAM_OK;
}
}
/**
* @brief Reads an amount of data from the SRAM device in polling mode.
* @param uwStartAddress : Read start address
* @param pData: Pointer to data to be read
* @param uwDataSize: Size of read data from the memory
* @retval SRAM status
*/
uint8_t BSP_SRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize)
{
if(HAL_SRAM_Read_16b(&sramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
{
return SRAM_ERROR;
}
else
{
return SRAM_OK;
}
}
/**
* @brief Reads an amount of data from the SRAM device in DMA mode.
* @param uwStartAddress : Read start address
* @param pData: Pointer to data to be read
* @param uwDataSize: Size of read data from the memory
* @retval SRAM status
*/
uint8_t BSP_SRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize)
{
if(HAL_SRAM_Read_DMA(&sramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK)
{
return SRAM_ERROR;
}
else
{
return SRAM_OK;
}
}
/**
* @brief Writes an amount of data from the SRAM device in polling mode.
* @param uwStartAddress: Write start address
* @param pData: Pointer to data to be written
* @param uwDataSize: Size of written data from the memory
* @retval SRAM status
*/
uint8_t BSP_SRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize)
{
if(HAL_SRAM_Write_16b(&sramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
{
return SRAM_ERROR;
}
else
{
return SRAM_OK;
}
}
/**
* @brief Writes an amount of data from the SRAM device in DMA mode.
* @param uwStartAddress: Write start address
* @param pData: Pointer to data to be written
* @param uwDataSize: Size of written data from the memory
* @retval SRAM status
*/
uint8_t BSP_SRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize)
{
if(HAL_SRAM_Write_DMA(&sramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK)
{
return SRAM_ERROR;
}
else
{
return SRAM_OK;
}
}
/**
* @brief Handles SRAM DMA transfer interrupt request.
*/
void BSP_SRAM_DMA_IRQHandler(void)
{
HAL_DMA_IRQHandler(sramHandle.hdma);
}
/**
* @brief Initializes SRAM MSP.
*/
__weak void BSP_SRAM_MspInit(void)
{
static DMA_HandleTypeDef dmaHandle;
GPIO_InitTypeDef GPIO_Init_Structure;
SRAM_HandleTypeDef *hsram = &sramHandle;
/* Enable FSMC clock */
__HAL_RCC_FSMC_CLK_ENABLE();
/* Enable chosen DMAx clock */
__SRAM_DMAx_CLK_ENABLE();
/* Enable GPIOs clock */
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
/* Common GPIO configuration */
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_PULLUP;
GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF12_FSMC;
/* GPIOD configuration */
GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\
GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 |\
GPIO_PIN_14 | GPIO_PIN_15;
HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure);
/* GPIOE configuration */
GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3| GPIO_PIN_4 | GPIO_PIN_7 |\
GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |\
GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
HAL_GPIO_Init(GPIOE, &GPIO_Init_Structure);
/* GPIOF configuration */
GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\
GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
HAL_GPIO_Init(GPIOF, &GPIO_Init_Structure);
/* GPIOG configuration */
GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\
GPIO_PIN_5 | GPIO_PIN_9;
HAL_GPIO_Init(GPIOG, &GPIO_Init_Structure);
/* Configure common DMA parameters */
dmaHandle.Init.Channel = SRAM_DMAx_CHANNEL;
dmaHandle.Init.Direction = DMA_MEMORY_TO_MEMORY;
dmaHandle.Init.PeriphInc = DMA_PINC_ENABLE;
dmaHandle.Init.MemInc = DMA_MINC_ENABLE;
dmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
dmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
dmaHandle.Init.Mode = DMA_NORMAL;
dmaHandle.Init.Priority = DMA_PRIORITY_HIGH;
dmaHandle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
dmaHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
dmaHandle.Init.MemBurst = DMA_MBURST_INC8;
dmaHandle.Init.PeriphBurst = DMA_PBURST_INC8;
dmaHandle.Instance = SRAM_DMAx_STREAM;
/* Associate the DMA handle */
__HAL_LINKDMA(hsram, hdma, dmaHandle);
/* Deinitialize the stream for new transfer */
HAL_DMA_DeInit(&dmaHandle);
/* Configure the DMA stream */
HAL_DMA_Init(&dmaHandle);
/* NVIC configuration for DMA transfer complete interrupt */
HAL_NVIC_SetPriority(SRAM_DMAx_IRQn, 0x0F, 0);
HAL_NVIC_EnableIRQ(SRAM_DMAx_IRQn);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,106 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_sram.h
* @author MCD Application Team
* @brief This file contains the common defines and functions prototypes for
* the stm322xg_eval_sram.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM322xG_EVAL_SRAM_H
#define __STM322xG_EVAL_SRAM_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f2xx_hal.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @addtogroup STM322xG_EVAL_SRAM
* @{
*/
/** @defgroup STM322xG_EVAL_SRAM_Exported_Constants STM322xG EVAL SRAM Exported Constants
* @{
*/
/**
* @brief SD status structure definition
*/
#define SRAM_OK 0x00
#define SRAM_ERROR 0x01
#define SRAM_DEVICE_ADDR ((uint32_t)0x64000000)
#define SRAM_DEVICE_SIZE ((uint32_t)0x200000) /* SRAM device size in Bytes */
/* #define SRAM_MEMORY_WIDTH FSMC_NORSRAM_MEM_BUS_WIDTH_8 */
#define SRAM_MEMORY_WIDTH FSMC_NORSRAM_MEM_BUS_WIDTH_16
#define SRAM_BURSTACCESS FSMC_BURST_ACCESS_MODE_DISABLE
/* #define SRAM_BURSTACCESS FSMC_BURST_ACCESS_MODE_ENABLE */
#define SRAM_WRITEBURST FSMC_WRITE_BURST_DISABLE
/* #define SRAM_WRITEBURST FSMC_WRITE_BURST_ENABLE */
/* DMA definitions for SRAM DMA transfer */
#define __SRAM_DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE
#define SRAM_DMAx_CHANNEL DMA_CHANNEL_0
#define SRAM_DMAx_STREAM DMA2_Stream0
#define SRAM_DMAx_IRQn DMA2_Stream0_IRQn
#define SRAM_DMAx_IRQHandler DMA2_Stream0_IRQHandler
/**
* @}
*/
/** @defgroup STM322xG_EVAL_SRAM_Exported_Functions STM322xG EVAL SRAM Exported Functions
* @{
*/
uint8_t BSP_SRAM_Init(void);
uint8_t BSP_SRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize);
uint8_t BSP_SRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize);
uint8_t BSP_SRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize);
uint8_t BSP_SRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize);
void BSP_SRAM_DMA_IRQHandler(void);
void BSP_SRAM_MspInit(void);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM322xG_EVAL_SRAM_H */

View File

@ -1,218 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_ts.c
* @author MCD Application Team
* @brief This file provides a set of functions needed to manage the touch
* screen on STM322xG-EVAL evaluation board.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* File Info : -----------------------------------------------------------------
User NOTES
1. How To use this driver:
--------------------------
- This driver is used to drive the touch screen module of the STM322xG-EVAL
evaluation board on the ILI9325 LCD mounted on MB785 daughter board .
- The STMPE811 IO expander device component driver must be included with this
driver in order to run the TS module commanded by the IO expander device
mounted on the evaluation board.
2. Driver description:
---------------------
+ Initialization steps:
o Initialize the TS module using the BSP_TS_Init() function. This
function includes the MSP layer hardware resources initialization and the
communication layer configuration to start the TS use. The LCD size properties
(x and y) are passed as parameters.
o If TS interrupt mode is desired, you must configure the TS interrupt mode
by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated
as an external interrupt whenever a touch is detected.
+ Touch screen use
o The touch screen state is captured whenever the function BSP_TS_GetState() is
used. This function returns information about the last LCD touch occurred
in the TS_StateTypeDef structure.
o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get
the interrupt status. To clear the IT pending bits, you should call the
function BSP_TS_ITClear().
o The IT is handled using the corresponding external interrupt IRQ handler,
the user IT callback treatment is implemented on the same external interrupt
callback.
------------------------------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval_ts.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @defgroup STM322xG_EVAL_TS STM322xG EVAL TS
* @{
*/
/** @defgroup STM322xG_EVAL_TS_Private_Variables STM322xG EVAL TS Private Variables
* @{
*/
static TS_DrvTypeDef *ts_driver;
static uint16_t ts_x_boundary, ts_y_boundary;
static uint8_t ts_orientation;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_TS_Private_Function_Prototypes STM322xG EVAL TS Private Function Prototypes
* @{
*/
/**
* @}
*/
/** @defgroup STM322xG_EVAL_TS_Private_Functions STM322xG EVAL TS Private Functions
* @{
*/
/**
* @brief Initializes and configures the touch screen functionalities and
* configures all necessary hardware resources (GPIOs, clocks..).
* @param xSize: Maximum X size of the TS area on LCD
* @param ySize: Maximum Y size of the TS area on LCD
* @retval TS_OK if all initializations are OK. Other value if error.
*/
uint8_t BSP_TS_Init(uint16_t xSize, uint16_t ySize)
{
uint8_t ret = TS_ERROR;
if(stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID)
{
/* Initialize the TS driver structure */
ts_driver = &stmpe811_ts_drv;
/* Initialize x and y positions boundaries */
ts_x_boundary = xSize;
ts_y_boundary = ySize;
ts_orientation = TS_SWAP_XY;
ret = TS_OK;
}
if(ret == TS_OK)
{
/* Initialize the LL TS Driver */
ts_driver->Init(TS_I2C_ADDRESS);
ts_driver->Start(TS_I2C_ADDRESS);
}
return ret;
}
/**
* @brief Configures and enables the touch screen interrupts.
* @retval TS_OK if all initializations are OK. Other value if error.
*/
uint8_t BSP_TS_ITConfig(void)
{
/* Call component driver to enable TS ITs */
ts_driver->EnableIT(TS_I2C_ADDRESS);
return TS_OK;
}
/**
* @brief Gets the touch screen interrupt status.
* @retval TS_OK if all initializations are OK. Other value if error.
*/
uint8_t BSP_TS_ITGetStatus(void)
{
/* Call component driver to enable TS ITs */
return (ts_driver->GetITStatus(TS_I2C_ADDRESS));
}
/**
* @brief Returns status and positions of the touch screen.
* @param TS_State: Pointer to touch screen current state structure
* @retval TS_OK if all initializations are OK. Other value if error.
*/
uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State)
{
static uint32_t _x = 0, _y = 0;
uint16_t xDiff, yDiff , x , y;
uint16_t swap;
TS_State->TouchDetected = ts_driver->DetectTouch(TS_I2C_ADDRESS);
if(TS_State->TouchDetected)
{
ts_driver->GetXY(TS_I2C_ADDRESS, &x, &y);
if(ts_orientation & TS_SWAP_X)
{
x = 4096 - x;
}
if(ts_orientation & TS_SWAP_Y)
{
y = 4096 - y;
}
if(ts_orientation & TS_SWAP_XY)
{
swap = y;
y = x;
x = swap;
}
xDiff = x > _x? (x - _x): (_x - x);
yDiff = y > _y? (y - _y): (_y - y);
if (xDiff + yDiff > 5)
{
_x = x;
_y = y;
}
TS_State->x = (ts_x_boundary * _x) >> 12;
TS_State->y = (ts_y_boundary * _y) >> 12;
}
return TS_OK;
}
/**
* @brief Clears all touch screen interrupts.
*/
void BSP_TS_ITClear(void)
{
ts_driver->ClearIT(TS_I2C_ADDRESS);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,107 +0,0 @@
/**
******************************************************************************
* @file stm322xg_eval_ts.h
* @author MCD Application Team
* @brief This file contains the common defines and functions prototypes for
* the stm322xg_eval_ts.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM322xG_EVAL_TS_H
#define __STM322xG_EVAL_TS_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm322xg_eval.h"
/* Include IOExpander(STMPE811) component Driver */
#include "../Components/stmpe811/stmpe811.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM322xG_EVAL
* @{
*/
/** @addtogroup STM322xG_EVAL_TS
* @{
*/
/** @defgroup STM322xG_EVAL_TS_Exported_Types STM322xG EVAL TS Exported Types
* @{
*/
typedef struct
{
uint16_t TouchDetected;
uint16_t x;
uint16_t y;
uint16_t z;
}TS_StateTypeDef;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_TS_Exported_Constants STM322xG EVAL TS Exported Constants
* @{
*/
#define TS_SWAP_NONE 0x00
#define TS_SWAP_X 0x01
#define TS_SWAP_Y 0x02
#define TS_SWAP_XY 0x04
typedef enum
{
TS_OK = 0x00,
TS_ERROR = 0x01,
TS_TIMEOUT = 0x02
}TS_StatusTypeDef;
/**
* @}
*/
/** @defgroup STM322xG_EVAL_TS_Exported_Functions STM322xG EVAL TS Exported Functions
* @{
*/
uint8_t BSP_TS_Init(uint16_t xSize, uint16_t ySize);
uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State);
uint8_t BSP_TS_ITConfig(void);
uint8_t BSP_TS_ITGetStatus(void);
void BSP_TS_ITClear(void);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM322xG_EVAL_TS_H */

@ -0,0 +1 @@
Subproject commit b56fdfb04649324fee1d5b5bc9b14aafa1992084

View File

@ -1,27 +0,0 @@
Copyright 2017 STMicroelectronics.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,36 +0,0 @@
# BSP STM32F2xx_Nucleo_144 Component
![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32f2xx-nucleo-144.svg?color=brightgreen)
## Overview
**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost.
**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series.
* The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product.
* The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio.
* The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series.
* A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library...
* A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series.
Two models of publication are proposed for the STM32Cube embedded software:
* The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series).
* The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions.
## Description
This **stm32f2xx-nucleo-144** MCU component repository is one element of the **STM32CubeF2** MCU embedded software package, providing the **STM32F2xx_Nucleo_144** BSP BOARD component part.
## Release note
Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32f2xx-nucleo-144/blob/main/Release_Notes.html).
## Compatibility information
Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF2/blob/master/Release_Notes.html) release note.
* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common)
## Troubleshooting
Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide.

View File

@ -1,82 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Release Notes for STM32F2xx_Nucleo_144 Board Drivers</title>
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<link rel="stylesheet" href="_htmresc/mini-st_2020.css" />
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
<link rel="icon" type="image/x-icon" href="_htmresc/favicon.png" />
</head>
<body>
<div class="row">
<div class="col-sm-12 col-lg-4">
<center>
<h1 id="release-notes-for-stm32f2xx_nucleo_144-board-drivers"><small>Release Notes for</small> <mark>STM32F2xx_Nucleo_144 Board Drivers</mark></h1>
<p>Copyright © 2017 STMicroelectronics<br />
</p>
<a href="https://www.st.com" class="logo"><img src="_htmresc/st_logo_2020.png" alt="ST logo" /></a>
</center>
<h1 id="purpose">Purpose</h1>
<p>This directory contains the board drivers to demonstrate the capabilities of the STM32F2xx Nucleo 144 Kit.</p>
</div>
<div class="col-sm-12 col-lg-8">
<h1 id="update-history">Update History</h1>
<div class="collapse">
<input type="checkbox" id="collapse-section4" checked aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V1.0.3 / 07-April-2023</label>
<div>
<h2 id="main-changes">Main Changes</h2>
<ul>
<li>All source files: update disclaimer to add reference to the new license agreement.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true">V1.0.2 / 29-September-2017</label>
<div>
<h2 id="main-changes-1">Main Changes</h2>
<ul>
<li>Remove DATE and VERSION from header files</li>
<li>stm32f2xx_nucleo_144.c:
<ul>
<li>Upgrade version to v1.0.2</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.0.1 / 27-January-2017</label>
<div>
<h2 id="main-changes-2">Main Changes</h2>
<ul>
<li>BSP_JOY_GetState() API: update the check condition for the ADC continuous conversion of regular channel.</li>
<li>General updates to fix doxygen errors</li>
<li>Add STM32F2-Nucleo_144_BSP_User_Manual.chm file</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.0.0 / 20-November-2015</label>
<div>
<h2 id="main-changes-3">Main Changes</h2>
<ul>
<li>First official release</li>
</ul>
</div>
</div>
</div>
</div>
<footer class="sticky">
For complete documentation on <mark>STM32 Microcontrollers</mark> , visit: <a href="http://www.st.com/STM32">http://www.st.com/STM32</a>
</footer>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

View File

@ -1,863 +0,0 @@
/**
******************************************************************************
* @file stm32f2xx_nucleo_144.c
* @author MCD Application Team
* @brief This file provides set of firmware functions to manage:
* - LEDs and push-button available on STM32F2XX-Nucleo-144 Kit
* from STMicroelectronics
* - LCD, joystick and microSD available on Adafruit 1.8" TFT LCD
* shield (reference ID 802)
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f2xx_nucleo_144.h"
/** @defgroup BSP BSP
* @{
*/
/** @defgroup STM32F2XX_NUCLEO_144 STM32F2XX NUCLEO 144
* @{
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL STM32F2XX NUCLEO 144 LOW LEVEL
* @brief This file provides set of firmware functions to manage Leds and push-button
* available on STM32F2xx-Nucleo Kit from STMicroelectronics.
* @{
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Private_TypesDefinitions STM32F2XX NUCLEO 144 LOW LEVEL Private TypesDefinitions
* @{
*/
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Private_Defines STM32F2XX NUCLEO 144 LOW LEVEL Private Defines
* @{
*/
/**
* @brief STM32F2xx NUCLEO BSP Driver version number V1.0.2
*/
#define __STM32F2xx_NUCLEO_BSP_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F2xx_NUCLEO_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */
#define __STM32F2xx_NUCLEO_BSP_VERSION_SUB2 (0x03) /*!< [15:8] sub2 version */
#define __STM32F2xx_NUCLEO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F2xx_NUCLEO_BSP_VERSION ((__STM32F2xx_NUCLEO_BSP_VERSION_MAIN << 24) |\
(__STM32F2xx_NUCLEO_BSP_VERSION_SUB1 << 16) |\
(__STM32F2xx_NUCLEO_BSP_VERSION_SUB2 << 8 ) |\
(__STM32F2xx_NUCLEO_BSP_VERSION_RC))
/**
* @brief LINK SD Card
*/
#define SD_DUMMY_BYTE 0xFF
#define SD_NO_RESPONSE_EXPECTED 0x80
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Private_Macros STM32F2XX NUCLEO 144 LOW LEVEL Private Macros
* @{
*/
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Private_Variables STM32F2XX NUCLEO 144 LOW LEVEL Private Variables
* @{
*/
GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT};
const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN};
GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {USER_BUTTON_GPIO_PORT};
const uint16_t BUTTON_PIN[BUTTONn] = {USER_BUTTON_PIN};
const uint8_t BUTTON_IRQn[BUTTONn] = {USER_BUTTON_EXTI_IRQn};
/**
* @brief BUS variables
*/
#ifdef ADAFRUIT_TFT_JOY_SD_ID802
#ifdef HAL_SPI_MODULE_ENABLED
uint32_t SpixTimeout = NUCLEO_SPIx_TIMEOUT_MAX; /*<! Value of Timeout when SPI communication fails */
static SPI_HandleTypeDef hnucleo_Spi;
#endif /* HAL_SPI_MODULE_ENABLED */
#ifdef HAL_ADC_MODULE_ENABLED
static ADC_HandleTypeDef hnucleo_Adc;
/* ADC channel configuration structure declaration */
static ADC_ChannelConfTypeDef sConfig;
#endif /* HAL_ADC_MODULE_ENABLED */
#endif /* ADAFRUIT_TFT_JOY_SD_ID802 */
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Private_FunctionPrototypes STM32F2XX NUCLEO 144 LOW LEVEL Private FunctionPrototypes
* @{
*/
#ifdef ADAFRUIT_TFT_JOY_SD_ID802
#ifdef HAL_SPI_MODULE_ENABLED
static void SPIx_Init(void);
static void SPIx_Write(uint8_t Value);
static void SPIx_Error(void);
static void SPIx_MspInit(SPI_HandleTypeDef *hspi);
/* SD IO functions */
void SD_IO_Init(void);
void SD_IO_CSState(uint8_t state);
void SD_IO_WriteReadData(const uint8_t *DataIn, uint8_t *DataOut, uint16_t DataLength);
uint8_t SD_IO_WriteByte(uint8_t Data);
/* LCD IO functions */
void LCD_IO_Init(void);
void LCD_IO_WriteData(uint8_t Data);
void LCD_IO_WriteMultipleData(uint8_t *pData, uint32_t Size);
void LCD_IO_WriteReg(uint8_t LCDReg);
void LCD_Delay(uint32_t delay);
#endif /* HAL_SPI_MODULE_ENABLED */
#ifdef HAL_ADC_MODULE_ENABLED
static void ADCx_Init(void);
static void ADCx_DeInit(void);
static void ADCx_MspInit(ADC_HandleTypeDef *hadc);
static void ADCx_MspDeInit(ADC_HandleTypeDef *hadc);
#endif /* HAL_ADC_MODULE_ENABLED */
#endif /* ADAFRUIT_TFT_JOY_SD_ID802 */
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Private_Functions STM32F2XX NUCLEO 144 LOW LEVEL Private Functions
* @{
*/
/**
* @brief This method returns the STM32F2xx NUCLEO BSP Driver revision
* @retval version: 0xXYZR (8bits for each decimal, R for RC)
*/
uint32_t BSP_GetVersion(void)
{
return __STM32F2xx_NUCLEO_BSP_VERSION;
}
/**
* @brief Configures LED GPIO.
* @param Led: Specifies the Led to be configured.
* This parameter can be one of following parameters:
* @arg LED1
* @arg LED2
* @arg LED3
*/
void BSP_LED_Init(Led_TypeDef Led)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* Enable the GPIO_LED Clock */
LEDx_GPIO_CLK_ENABLE(Led);
/* Configure the GPIO_LED pin */
GPIO_InitStruct.Pin = GPIO_PIN[Led];
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
HAL_GPIO_Init(GPIO_PORT[Led], &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET);
}
/**
* @brief DeInit LEDs.
* @param Led: LED to be de-init.
* This parameter can be one of the following values:
* @arg LED1
* @arg LED2
* @arg LED3
* @note Led DeInit does not disable the GPIO clock nor disable the Mfx
*/
void BSP_LED_DeInit(Led_TypeDef Led)
{
GPIO_InitTypeDef gpio_init_structure;
/* Turn off LED */
HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET);
/* DeInit the GPIO_LED pin */
gpio_init_structure.Pin = GPIO_PIN[Led];
HAL_GPIO_DeInit(GPIO_PORT[Led], gpio_init_structure.Pin);
}
/**
* @brief Turns selected LED On.
* @param Led: Specifies the Led to be set on.
* This parameter can be one of following parameters:
* @arg LED2
*/
void BSP_LED_On(Led_TypeDef Led)
{
HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET);
}
/**
* @brief Turns selected LED Off.
* @param Led: Specifies the Led to be set off.
* This parameter can be one of following parameters:
* @arg LED1
* @arg LED2
* @arg LED3
*/
void BSP_LED_Off(Led_TypeDef Led)
{
HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET);
}
/**
* @brief Toggles the selected LED.
* @param Led: Specifies the Led to be toggled.
* This parameter can be one of following parameters:
* @arg LED1
* @arg LED2
* @arg LED3
*/
void BSP_LED_Toggle(Led_TypeDef Led)
{
HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]);
}
/**
* @brief Configures Button GPIO and EXTI Line.
* @param Button: Specifies the Button to be configured.
* This parameter should be: BUTTON_USER
* @param ButtonMode: Specifies Button mode.
* This parameter can be one of following parameters:
* @arg BUTTON_MODE_GPIO: Button will be used as simple IO
* @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt
* generation capability
*/
void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* Enable the BUTTON Clock */
BUTTONx_GPIO_CLK_ENABLE(Button);
if(ButtonMode == BUTTON_MODE_GPIO)
{
/* Configure Button pin as input */
GPIO_InitStruct.Pin = BUTTON_PIN[Button];
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStruct);
}
if(ButtonMode == BUTTON_MODE_EXTI)
{
/* Configure Button pin as input with External interrupt */
GPIO_InitStruct.Pin = BUTTON_PIN[Button];
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStruct);
/* Enable and set Button EXTI Interrupt to the lowest priority */
HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00);
HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
}
}
/**
* @brief Push Button DeInit.
* @param Button: Button to be configured
* This parameter should be: BUTTON_USER
* @note PB DeInit does not disable the GPIO clock
*/
void BSP_PB_DeInit(Button_TypeDef Button)
{
GPIO_InitTypeDef gpio_init_structure;
gpio_init_structure.Pin = BUTTON_PIN[Button];
HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin);
}
/**
* @brief Returns the selected Button state.
* @param Button: Specifies the Button to be checked.
* This parameter should be: BUTTON_USER
* @retval The Button GPIO pin value.
*/
uint32_t BSP_PB_GetState(Button_TypeDef Button)
{
return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
}
/******************************************************************************
BUS OPERATIONS
*******************************************************************************/
#ifdef ADAFRUIT_TFT_JOY_SD_ID802
/******************************* SPI ********************************/
#ifdef HAL_SPI_MODULE_ENABLED
/**
* @brief Initializes SPI MSP.
*/
static void SPIx_MspInit(SPI_HandleTypeDef *hspi)
{
GPIO_InitTypeDef GPIO_InitStruct;
/*** Configure the GPIOs ***/
/* Enable GPIO clock */
NUCLEO_SPIx_SCK_GPIO_CLK_ENABLE();
NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_ENABLE();
/* Configure SPI SCK */
GPIO_InitStruct.Pin = NUCLEO_SPIx_SCK_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = NUCLEO_SPIx_SCK_AF;
HAL_GPIO_Init(NUCLEO_SPIx_SCK_GPIO_PORT, &GPIO_InitStruct);
/* Configure SPI MISO and MOSI */
GPIO_InitStruct.Pin = NUCLEO_SPIx_MOSI_PIN;
GPIO_InitStruct.Alternate = NUCLEO_SPIx_MISO_MOSI_AF;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(NUCLEO_SPIx_MISO_MOSI_GPIO_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = NUCLEO_SPIx_MISO_PIN;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(NUCLEO_SPIx_MISO_MOSI_GPIO_PORT, &GPIO_InitStruct);
/*** Configure the SPI peripheral ***/
/* Enable SPI clock */
NUCLEO_SPIx_CLK_ENABLE();
}
/**
* @brief Initializes SPI HAL.
*/
static void SPIx_Init(void)
{
if(HAL_SPI_GetState(&hnucleo_Spi) == HAL_SPI_STATE_RESET)
{
/* SPI Config */
hnucleo_Spi.Instance = NUCLEO_SPIx;
/* SPI configuration constraints
- ST7735 LCD SPI interface max baudrate is 15MHz for write and 6.66MHz for read
Since the provided driver doesn't use read capability from LCD, only constraint
on write baudrate is considered.
- SD card SPI interface max baudrate is 25MHz for write/read
to feat these constraints SPI baudrate is set to:
- For STM32F207xx devices: 10,5 MHz maximum (PCLK2/SPI_BAUDRATEPRESCALER_8 = 84 MHz/8 = 10,5 MHz)
*/
hnucleo_Spi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
hnucleo_Spi.Init.Direction = SPI_DIRECTION_2LINES;
hnucleo_Spi.Init.CLKPhase = SPI_PHASE_2EDGE;
hnucleo_Spi.Init.CLKPolarity = SPI_POLARITY_HIGH;
hnucleo_Spi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
hnucleo_Spi.Init.CRCPolynomial = 7;
hnucleo_Spi.Init.DataSize = SPI_DATASIZE_8BIT;
hnucleo_Spi.Init.FirstBit = SPI_FIRSTBIT_MSB;
hnucleo_Spi.Init.NSS = SPI_NSS_SOFT;
hnucleo_Spi.Init.TIMode = SPI_TIMODE_DISABLED;
hnucleo_Spi.Init.Mode = SPI_MODE_MASTER;
SPIx_MspInit(&hnucleo_Spi);
HAL_SPI_Init(&hnucleo_Spi);
}
}
/**
* @brief SPI Write a byte to device
* @param DataIn: value to be written
* @param DataOut: value to read
* @param DataLegnth: length of data
*/
static void SPIx_WriteReadData(const uint8_t *DataIn, uint8_t *DataOut, uint16_t DataLegnth)
{
HAL_StatusTypeDef status = HAL_OK;
status = HAL_SPI_TransmitReceive(&hnucleo_Spi, (uint8_t*) DataIn, DataOut, DataLegnth, SpixTimeout);
/* Check the communication status */
if(status != HAL_OK)
{
/* Execute user timeout callback */
SPIx_Error();
}
}
/**
* @brief SPI Write a byte to device.
* @param Value: value to be written
*/
static void SPIx_Write(uint8_t Value)
{
HAL_StatusTypeDef status = HAL_OK;
uint8_t data;
status = HAL_SPI_TransmitReceive(&hnucleo_Spi, (uint8_t*) &Value, &data, 1, SpixTimeout);
/* Check the communication status */
if(status != HAL_OK)
{
/* Execute user timeout callback */
SPIx_Error();
}
}
/**
* @brief SPI error treatment function
*/
static void SPIx_Error (void)
{
/* De-initialize the SPI communication BUS */
HAL_SPI_DeInit(&hnucleo_Spi);
/* Re-Initiaize the SPI communication BUS */
SPIx_Init();
}
/******************************************************************************
LINK OPERATIONS
*******************************************************************************/
/********************************* LINK SD ************************************/
/**
* @brief Initializes the SD Card and put it into StandBy State (Ready for
* data transfer).
*/
void SD_IO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
uint8_t counter;
/* SD_CS_GPIO Periph clock enable */
SD_CS_GPIO_CLK_ENABLE();
/* Configure SD_CS_PIN pin: SD Card CS pin */
GPIO_InitStruct.Pin = SD_CS_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStruct);
/* LCD chip select line perturbs SD also when the LCD is not used */
/* this is a workaround to avoid sporadic failures during r/w operations */
LCD_CS_GPIO_CLK_ENABLE();
GPIO_InitStruct.Pin = LCD_CS_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(LCD_CS_GPIO_PORT, &GPIO_InitStruct);
LCD_CS_HIGH();
/*------------Put SD in SPI mode--------------*/
/* SD SPI Config */
SPIx_Init();
/* SD chip select high */
SD_CS_HIGH();
/* Send dummy byte 0xFF, 10 times with CS high */
/* Rise CS and MOSI for 80 clocks cycles */
for (counter = 0; counter <= 9; counter++)
{
/* Send dummy byte 0xFF */
SD_IO_WriteByte(SD_DUMMY_BYTE);
}
}
/**
* @brief Set the SD_CS pin.
* @param val: pin value.
*/
void SD_IO_CSState(uint8_t val)
{
if(val == 1)
{
SD_CS_HIGH();
}
else
{
SD_CS_LOW();
}
}
/**
* @brief Write a byte on the SD.
* @param DataIn: byte to send.
* @param DataOut: byte to read
* @param DataLength: length of data
*/
void SD_IO_WriteReadData(const uint8_t *DataIn, uint8_t *DataOut, uint16_t DataLength)
{
/* Send the byte */
SPIx_WriteReadData(DataIn, DataOut, DataLength);
}
/**
* @brief Writes a byte on the SD.
* @param Data: byte to send.
*/
uint8_t SD_IO_WriteByte(uint8_t Data)
{
uint8_t tmp;
/* Send the byte */
SPIx_WriteReadData(&Data,&tmp,1);
return tmp;
}
/********************************* LINK LCD ***********************************/
/**
* @brief Initializes the LCD
*/
void LCD_IO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* LCD_CS_GPIO and LCD_DC_GPIO Periph clock enable */
LCD_CS_GPIO_CLK_ENABLE();
LCD_DC_GPIO_CLK_ENABLE();
/* Configure LCD_CS_PIN pin: LCD Card CS pin */
GPIO_InitStruct.Pin = LCD_CS_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(LCD_CS_GPIO_PORT, &GPIO_InitStruct);
/* Configure LCD_DC_PIN pin: LCD Card DC pin */
GPIO_InitStruct.Pin = LCD_DC_PIN;
HAL_GPIO_Init(LCD_DC_GPIO_PORT, &GPIO_InitStruct);
/* LCD chip select high */
LCD_CS_HIGH();
/* LCD SPI Config */
SPIx_Init();
}
/**
* @brief Writes command to select the LCD register.
* @param LCDReg: Address of the selected register.
*/
void LCD_IO_WriteReg(uint8_t LCDReg)
{
/* Reset LCD control line CS */
LCD_CS_LOW();
/* Set LCD data/command line DC to Low */
LCD_DC_LOW();
/* Send Command */
SPIx_Write(LCDReg);
/* Deselect : Chip Select high */
LCD_CS_HIGH();
}
/**
* @brief Writes data to select the LCD register.
* This function must be used after st7735_WriteReg() function
* @param Data: data to write to the selected register.
*/
void LCD_IO_WriteData(uint8_t Data)
{
/* Reset LCD control line CS */
LCD_CS_LOW();
/* Set LCD data/command line DC to High */
LCD_DC_HIGH();
/* Send Data */
SPIx_Write(Data);
/* Deselect : Chip Select high */
LCD_CS_HIGH();
}
/**
* @brief Write register value.
* @param pData Pointer on the register value
* @param Size Size of byte to transmit to the register
*/
void LCD_IO_WriteMultipleData(uint8_t *pData, uint32_t Size)
{
uint32_t counter = 0;
__IO uint32_t data = 0;
/* Reset LCD control line CS */
LCD_CS_LOW();
/* Set LCD data/command line DC to High */
LCD_DC_HIGH();
if (Size == 1)
{
/* Only 1 byte to be sent to LCD - general interface can be used */
/* Send Data */
SPIx_Write(*pData);
}
else
{
/* Several data should be sent in a raw */
/* Direct SPI accesses for optimization */
for (counter = Size; counter != 0; counter--)
{
while(((hnucleo_Spi.Instance->SR) & SPI_FLAG_TXE) != SPI_FLAG_TXE)
{
}
/* Need to invert bytes for LCD*/
*((__IO uint8_t*)&hnucleo_Spi.Instance->DR) = *(pData+1);
while(((hnucleo_Spi.Instance->SR) & SPI_FLAG_TXE) != SPI_FLAG_TXE)
{
}
*((__IO uint8_t*)&hnucleo_Spi.Instance->DR) = *pData;
counter--;
pData += 2;
}
/* Wait until the bus is ready before releasing Chip select */
while(((hnucleo_Spi.Instance->SR) & SPI_FLAG_BSY) != RESET)
{
}
}
/* Empty the Rx fifo */
data = *(&hnucleo_Spi.Instance->DR);
UNUSED(data); /* Remove GNU warning */
/* Deselect : Chip Select high */
LCD_CS_HIGH();
}
/**
* @brief Wait for loop in ms.
* @param Delay in ms.
*/
void LCD_Delay(uint32_t Delay)
{
HAL_Delay(Delay);
}
#endif /* HAL_SPI_MODULE_ENABLED */
/******************************* ADC driver ********************************/
#ifdef HAL_ADC_MODULE_ENABLED
/**
* @brief Initializes ADC MSP.
*/
static void ADCx_MspInit(ADC_HandleTypeDef *hadc)
{
GPIO_InitTypeDef GPIO_InitStruct;
/*** Configure the GPIOs ***/
/* Enable GPIO clock */
NUCLEO_ADCx_GPIO_CLK_ENABLE();
/* Configure the selected ADC Channel as analog input */
GPIO_InitStruct.Pin = NUCLEO_ADCx_GPIO_PIN ;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(NUCLEO_ADCx_GPIO_PORT, &GPIO_InitStruct);
/*** Configure the ADC peripheral ***/
/* Enable ADC clock */
NUCLEO_ADCx_CLK_ENABLE();
}
/**
* @brief DeInitializes ADC MSP.
* @note ADC DeInit does not disable the GPIO clock
*/
static void ADCx_MspDeInit(ADC_HandleTypeDef *hadc)
{
GPIO_InitTypeDef GPIO_InitStruct;
/*** DeInit the ADC peripheral ***/
/* Disable ADC clock */
NUCLEO_ADCx_CLK_DISABLE();
/* Configure the selected ADC Channel as analog input */
GPIO_InitStruct.Pin = NUCLEO_ADCx_GPIO_PIN ;
HAL_GPIO_DeInit(NUCLEO_ADCx_GPIO_PORT, GPIO_InitStruct.Pin);
/* Disable GPIO clock has to be done by the application*/
/* NUCLEO_ADCx_GPIO_CLK_DISABLE(); */
}
/**
* @brief Initializes ADC HAL.
*/
static void ADCx_Init(void)
{
if(HAL_ADC_GetState(&hnucleo_Adc) == HAL_ADC_STATE_RESET)
{
/* ADC Config */
hnucleo_Adc.Instance = NUCLEO_ADCx;
hnucleo_Adc.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4; /* (must not exceed 36MHz) */
hnucleo_Adc.Init.Resolution = ADC_RESOLUTION12b;
hnucleo_Adc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hnucleo_Adc.Init.ContinuousConvMode = DISABLE;
hnucleo_Adc.Init.DiscontinuousConvMode = DISABLE;
hnucleo_Adc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hnucleo_Adc.Init.EOCSelection = EOC_SINGLE_CONV;
hnucleo_Adc.Init.NbrOfConversion = 1;
hnucleo_Adc.Init.DMAContinuousRequests = DISABLE;
ADCx_MspInit(&hnucleo_Adc);
HAL_ADC_Init(&hnucleo_Adc);
}
}
/**
* @brief Initializes ADC HAL.
*/
static void ADCx_DeInit(void)
{
hnucleo_Adc.Instance = NUCLEO_ADCx;
HAL_ADC_DeInit(&hnucleo_Adc);
ADCx_MspDeInit(&hnucleo_Adc);
}
/******************************* LINK JOYSTICK ********************************/
/**
* @brief Configures joystick available on adafruit 1.8" TFT shield
* managed through ADC to detect motion.
* @retval Joystickstatus (0=> success, 1=> fail)
*/
uint8_t BSP_JOY_Init(void)
{
uint8_t status = HAL_ERROR;
ADCx_Init();
/* Select the ADC Channel to be converted */
sConfig.Channel = NUCLEO_ADCx_CHANNEL;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
sConfig.Rank = 1;
status = HAL_ADC_ConfigChannel(&hnucleo_Adc, &sConfig);
/* Return Joystick initialization status */
return status;
}
/**
* @brief DeInit joystick GPIOs.
* @note JOY DeInit does not disable the Mfx, just set the Mfx pins in Off mode
*/
void BSP_JOY_DeInit(void)
{
ADCx_DeInit();
}
/**
* @brief Returns the Joystick key pressed.
* @note To know which Joystick key is pressed we need to detect the voltage
* level on each key output
* - None : 3.3 V / 4095
* - SEL : 1.055 V / 1308
* - DOWN : 0.71 V / 88
* - LEFT : 3.0 V / 3720
* - RIGHT : 0.595 V / 737
* - UP : 1.65 V / 2046
* @retval JOYState_TypeDef: Code of the Joystick key pressed.
*/
JOYState_TypeDef BSP_JOY_GetState(void)
{
JOYState_TypeDef state;
uint16_t keyconvertedvalue = 0;
/* Start the conversion process */
HAL_ADC_Start(&hnucleo_Adc);
/* Wait for the end of conversion */
HAL_ADC_PollForConversion(&hnucleo_Adc, 10);
/* Check if the continuous conversion of regular channel is finished */
if((HAL_ADC_GetState(&hnucleo_Adc) & HAL_ADC_STATE_EOC_REG) == HAL_ADC_STATE_EOC_REG)
{
/* Get the converted value of regular channel */
keyconvertedvalue = HAL_ADC_GetValue(&hnucleo_Adc);
}
if((keyconvertedvalue > 2010) && (keyconvertedvalue < 2090))
{
state = JOY_UP;
}
else if((keyconvertedvalue > 680) && (keyconvertedvalue < 780))
{
state = JOY_RIGHT;
}
else if((keyconvertedvalue > 1270) && (keyconvertedvalue < 1350))
{
state = JOY_SEL;
}
else if((keyconvertedvalue > 50) && (keyconvertedvalue < 130))
{
state = JOY_DOWN;
}
else if((keyconvertedvalue > 3680) && (keyconvertedvalue < 3760))
{
state = JOY_LEFT;
}
else
{
state = JOY_NONE;
}
/* Loop while a key is pressed */
if(state != JOY_NONE)
{
keyconvertedvalue = HAL_ADC_GetValue(&hnucleo_Adc);
}
/* Return the code of the Joystick key pressed */
return state;
}
#endif /* HAL_ADC_MODULE_ENABLED */
#endif /* ADAFRUIT_TFT_JOY_SD_ID802 */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,327 +0,0 @@
/**
******************************************************************************
* @file stm32f2xx_nucleo_144.h
* @author MCD Application Team
* @brief This file contains definitions for:
* - LEDs and push-button available on STM32F2XX-Nucleo-144 Kit
* from STMicroelectronics
* - LCD, joystick and microSD available on Adafruit 1.8" TFT LCD
* shield (reference ID 802)
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F2XX_NUCLEO_144_H
#define __STM32F2XX_NUCLEO_144_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f2xx_hal.h"
/* To be defined only if the board is provided with the related shield */
/* https://www.adafruit.com/products/802 */
#ifndef ADAFRUIT_TFT_JOY_SD_ID802
#define ADAFRUIT_TFT_JOY_SD_ID802
#endif
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM32F2XX_NUCLEO_144
* @{
*/
/** @addtogroup STM32F2XX_NUCLEO_144_LOW_LEVEL
* @{
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Exported_Types STM32F2XX NUCLEO 144 LOW LEVEL Exported Types
* @{
*/
typedef enum
{
LED1 = 0,
LED_GREEN = LED1,
LED2 = 1,
LED_BLUE = LED2,
LED3 = 2,
LED_RED = LED3
}Led_TypeDef;
typedef enum
{
BUTTON_USER = 0,
/* Alias */
BUTTON_KEY = BUTTON_USER
}Button_TypeDef;
typedef enum
{
BUTTON_MODE_GPIO = 0,
BUTTON_MODE_EXTI = 1
}ButtonMode_TypeDef;
typedef enum
{
JOY_NONE = 0,
JOY_SEL = 1,
JOY_DOWN = 2,
JOY_LEFT = 3,
JOY_RIGHT = 4,
JOY_UP = 5
}JOYState_TypeDef;
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Exported_Constants STM32F2XX NUCLEO 144 LOW LEVEL Exported Constants
* @{
*/
/**
* @brief Define for STM32F2XX_NUCLEO_144 board
*/
#if !defined (USE_STM32F2XX_NUCLEO_144)
#define USE_STM32F2XX_NUCLEO_144
#endif
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_LED STM32F2XX NUCLEO 144 LOW LEVEL LED
* @{
*/
#define LEDn 3
#define LED1_PIN GPIO_PIN_0
#define LED1_GPIO_PORT GPIOB
#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
#define LED2_PIN GPIO_PIN_7
#define LED2_GPIO_PORT GPIOB
#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
#define LED3_PIN GPIO_PIN_14
#define LED3_GPIO_PORT GPIOB
#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == 0) {__HAL_RCC_GPIOB_CLK_ENABLE();} else\
{__HAL_RCC_GPIOB_CLK_ENABLE(); }} while(0)
#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do { if((__INDEX__) == 0) {__HAL_RCC_GPIOB_CLK_DISABLE();} else\
{__HAL_RCC_GPIOB_CLK_DISABLE(); }} while(0)
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_BUTTON STM32F2XX NUCLEO 144 LOW LEVEL BUTTON
* @{
*/
#define BUTTONn 1
/**
* @brief Key push-button
*/
#define USER_BUTTON_PIN GPIO_PIN_13
#define USER_BUTTON_GPIO_PORT GPIOC
#define USER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define USER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
#define USER_BUTTON_EXTI_LINE GPIO_PIN_13
#define USER_BUTTON_EXTI_IRQn EXTI15_10_IRQn
#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) USER_BUTTON_GPIO_CLK_ENABLE()
#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) USER_BUTTON_GPIO_CLK_DISABLE()
/* Aliases */
#define KEY_BUTTON_PIN USER_BUTTON_PIN
#define KEY_BUTTON_GPIO_PORT USER_BUTTON_GPIO_PORT
#define KEY_BUTTON_GPIO_CLK_ENABLE() USER_BUTTON_GPIO_CLK_ENABLE()
#define KEY_BUTTON_GPIO_CLK_DISABLE() USER_BUTTON_GPIO_CLK_DISABLE()
#define KEY_BUTTON_EXTI_LINE USER_BUTTON_EXTI_LINE
#define KEY_BUTTON_EXTI_IRQn USER_BUTTON_EXTI_IRQn
/**
* @brief OTG_FS1 OVER_CURRENT and POWER_SWITCH Pins definition
*/
#define OTG_FS1_OVER_CURRENT_PIN GPIO_PIN_7
#define OTG_FS1_OVER_CURRENT_PORT GPIOG
#define OTG_FS1_OVER_CURRENT_PORT_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define OTG_FS1_POWER_SWITCH_PIN GPIO_PIN_6
#define OTG_FS1_POWER_SWITCH_PORT GPIOG
#define OTG_FS1_POWER_SWITCH_PORT_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_BUS STM32F2XX NUCLEO 144 LOW LEVEL BUS
* @{
*/
/*############################### SPI_A #######################################*/
#ifdef HAL_SPI_MODULE_ENABLED
#define NUCLEO_SPIx SPI1
#define NUCLEO_SPIx_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE()
#define NUCLEO_SPIx_SCK_AF GPIO_AF5_SPI1
#define NUCLEO_SPIx_SCK_GPIO_PORT GPIOA
#define NUCLEO_SPIx_SCK_PIN GPIO_PIN_5
#define NUCLEO_SPIx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define NUCLEO_SPIx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define NUCLEO_SPIx_MISO_MOSI_AF GPIO_AF5_SPI1
#define NUCLEO_SPIx_MISO_MOSI_GPIO_PORT GPIOA
#define NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define NUCLEO_SPIx_MISO_PIN GPIO_PIN_6
#define NUCLEO_SPIx_MOSI_PIN GPIO_PIN_7
/* Maximum Timeout values for flags waiting loops. These timeout are not based
on accurate values, they just guarantee that the application will not remain
stuck if the SPI communication is corrupted.
You may modify these timeout values depending on CPU frequency and application
conditions (interrupts routines ...). */
#define NUCLEO_SPIx_TIMEOUT_MAX 1000
#define NUCLEO_SPIx_CS_GPIO_PORT GPIOD
#define NUCLEO_SPIx_CS_PIN GPIO_PIN_14
#define NUCLEO_SPIx_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define NUCLEO_SPIx_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
#define SPIx__CS_LOW() HAL_GPIO_WritePin(NUCLEO_SPIx_CS_GPIO_PORT, NUCLEO_SPIx_CS_PIN, GPIO_PIN_RESET)
#define SPIx__CS_HIGH() HAL_GPIO_WritePin(NUCLEO_SPIx_CS_GPIO_PORT, NUCLEO_SPIx_CS_PIN, GPIO_PIN_SET)
/**
* @brief SD Control Lines management
*/
#define SD_CS_LOW() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_RESET)
#define SD_CS_HIGH() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_SET)
/**
* @brief LCD Control Lines management
*/
#define LCD_CS_LOW() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_RESET)
#define LCD_CS_HIGH() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_SET)
#define LCD_DC_LOW() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_RESET)
#define LCD_DC_HIGH() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_SET)
/**
* @brief SD Control Interface pins (shield D4)
*/
#define SD_CS_PIN GPIO_PIN_14
#define SD_CS_GPIO_PORT GPIOF
#define SD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define SD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE()
/**
* @brief LCD Control Interface pins (shield D10)
*/
#define LCD_CS_PIN GPIO_PIN_14
#define LCD_CS_GPIO_PORT GPIOD
#define LCD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define LCD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
/**
* @brief LCD Data/Command Interface pins (shield D8)
*/
#define LCD_DC_PIN GPIO_PIN_12
#define LCD_DC_GPIO_PORT GPIOF
#define LCD_DC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define LCD_DC_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE()
#endif /* HAL_SPI_MODULE_ENABLED */
/*################################ ADCx for Nucleo 144 board ######################################*/
/**
* @brief ADCx Interface pins
* used to detect motion of Joystick available on Adafruit 1.8" TFT shield
*/
#ifdef HAL_ADC_MODULE_ENABLED
#define NUCLEO_ADCx ADC3
#define NUCLEO_ADCx_CLK_ENABLE() __HAL_RCC_ADC3_CLK_ENABLE()
#define NUCLEO_ADCx_CLK_DISABLE() __HAL_RCC_ADC3_CLK_DISABLE()
#define NUCLEO_ADCx_CHANNEL ADC_CHANNEL_9
#define NUCLEO_ADCx_GPIO_PORT GPIOF
#define NUCLEO_ADCx_GPIO_PIN GPIO_PIN_3
#define NUCLEO_ADCx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define NUCLEO_ADCx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE()
#endif /* HAL_ADC_MODULE_ENABLED */
/**
* @}
*/
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Exported_Macros STM32F2XX NUCLEO 144 LOW LEVEL Exported Macros
* @{
*/
/**
* @}
*/
/** @defgroup STM32F2XX_NUCLEO_144_LOW_LEVEL_Exported_Functions STM32F2XX NUCLEO 144 LOW LEVEL Exported Functions
* @{
*/
uint32_t BSP_GetVersion(void);
void BSP_LED_Init(Led_TypeDef Led);
void BSP_LED_DeInit(Led_TypeDef Led);
void BSP_LED_On(Led_TypeDef Led);
void BSP_LED_Off(Led_TypeDef Led);
void BSP_LED_Toggle(Led_TypeDef Led);
void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode);
void BSP_PB_DeInit(Button_TypeDef Button);
uint32_t BSP_PB_GetState(Button_TypeDef Button);
#ifdef HAL_ADC_MODULE_ENABLED
uint8_t BSP_JOY_Init(void);
JOYState_TypeDef BSP_JOY_GetState(void);
void BSP_JOY_DeInit(void);
#endif /* HAL_ADC_MODULE_ENABLED */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM32F2XX_NUCLEO_144_H */