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

This commit is contained in:
Ali Labbene 2024-01-15 15:37:15 +01:00
parent 00cec97220
commit 1386f613e0
67 changed files with 20 additions and 23022 deletions

16
.gitmodules vendored
View File

@ -6,3 +6,19 @@
path = Drivers/STM32F1xx_HAL_Driver
url = https://github.com/STMicroelectronics/stm32f1xx_hal_driver.git
branch = master
[submodule "Drivers/BSP/STM32F1xx_Nucleo"]
path = Drivers/BSP/STM32F1xx_Nucleo
url = https://github.com/STMicroelectronics/stm32f1xx-nucleo-bsp.git
branch = main
[submodule "Drivers/BSP/STM32VL-Discovery"]
path = Drivers/BSP/STM32VL-Discovery
url = https://github.com/STMicroelectronics/stm32vldiscovery-bsp.git
branch = main
[submodule "Drivers/BSP/STM3210C_EVAL"]
path = Drivers/BSP/STM3210C_EVAL
url = https://github.com/STMicroelectronics/stm3210c-eval-bsp.git
branch = main
[submodule "Drivers/BSP/STM3210E_EVAL"]
path = Drivers/BSP/STM3210E_EVAL
url = https://github.com/STMicroelectronics/stm3210e-eval-bsp.git
branch = main

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

View File

@ -1,27 +0,0 @@
Copyright 2014 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 STM3210C-EVAL Component
![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm3210c-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 **stm3210c-eval** MCU component repository is one element of the **STM32CubeF1** MCU embedded software package, providing the **STM3210C-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/stm3210c-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/STM32CubeF1/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-lis302dl](https://github.com/STMicroelectronics/stm32-lis302dl)
* [stm32-stmpe811](https://github.com/STMicroelectronics/stm32-stmpe811)
## Troubleshooting
Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide.

View File

@ -1,384 +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 STM3210C_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-stm3210c_eval-evaluation-board-drivers"><small>Release Notes for</small> <mark>STM3210C_EVAL Evaluation Board Drivers</mark></h1>
<p>Copyright © 2014 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 STM3210C 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-section16" checked aria-hidden="true"> <label for="collapse-section16" aria-hidden="true">V6.1.1 / 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-section15" aria-hidden="true"> <label for="collapse-section15" aria-hidden="true">V6.1.0 / 14-April-2017</label>
<div>
<h2 id="main-changes-1">Main Changes</h2>
<ul>
<li>Add STM3210C_EVAL_BSP_User_Manual.chm file</li>
<li>stm3210c_eval.c/.h:
<ul>
<li>Update SPI/SD I/O low level API to support SD high capacity card (&gt; 2Gbytes)</li>
<li>SD_IO_Init(): remove SD pin detecting NVIC configuration
<ul>
<li>Up to user application to configure the SD detecting pin with or without interrupt.</li>
</ul></li>
</ul></li>
<li>stm3210c_eval_sd.c/.h:
<ul>
<li>Update BSP SD APIs to support SD high capacity card (&gt; 2Gbytes)</li>
</ul></li>
<li>stm3210c_eval_audio.c/.h:
<ul>
<li>Add BSP_AUDIO_OUT_MspInit() and BSP_AUDIO_OUT_MspDeInit() as weak APIs to manage audio hardware resources initialization/de-initialization.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section14" aria-hidden="true"> <label for="collapse-section14" aria-hidden="true">V6.0.2 / 29-April-2016</label>
<div>
<h2 id="main-changes-2">Main Changes</h2>
<ul>
<li>Add AUDIO_IO_DeInit for compatibility with common V4.0.1.</li>
<li>Set the NVIC priority to the lowest possible to not interfere with user settings.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section13" aria-hidden="true"> <label for="collapse-section13" aria-hidden="true">V6.0.1 / 18-December-2015</label>
<div>
<h2 id="main-changes-3">Main Changes</h2>
<ul>
<li>Rename GPIO_SPEED_HIGH to GPIO_SPEED_FREQ_HIGH for compatibility with STM32F1xx HAL Drivers V1.0.2.</li>
<li>Rename GPIO_SPEED_MEDIUM to GPIO_SPEED_FREQ_MEDIUM for compatibility with STM32F1xx HAL Drivers V1.0.2.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section12" aria-hidden="true"> <label for="collapse-section12" aria-hidden="true">V6.0.0 / 16-December-2014</label>
<div>
<h2 id="main-changes-4">Main Changes</h2>
<ul>
<li>Major update based on STM32Cube specification: drivers architecture and APIs modified vs. V5.1.0 and thus the 2 versions are not compatible.</li>
<li>This version has to be used only with STM32CubeF1 based development.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section11" aria-hidden="true"> <label for="collapse-section11" aria-hidden="true">V5.1.0 / 08-January-2013</label>
<div>
<h2 id="main-changes-5">Main Changes</h2>
<ul>
<li>stm3210e_eval_lcd.c: update to support new LCD AM240320LGTNQW00H (controller HX8347-D).</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 / 05-March-2012</label>
<div>
<h2 id="main-changes-6">Main Changes</h2>
<ul>
<li>All source files: license disclaimer text update and add link to the License file on ST Internet.</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 / 03-February-2012</label>
<div>
<h2 id="main-changes-7">Main Changes</h2>
<ul>
<li>All source files: update disclaimer to add reference to the new license agreement</li>
<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 “stm3210e_eval.c” instead of “stm32_eval.c”</li>
<li>Include your EVAL board driver header file #include “stm3210e_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 “stm3210e_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>
</ul></li>
<li>stm3210e_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>stm3210e_eval.h/.c
<ul>
<li>change value of “SDIO_TRANSFER_CLK_DIV” define from 0 to 1 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>Update SD_LowLevel_DMA_TxConfig() and SD_LowLevel_DMA_RxConfig() functions to enable the DMA transfer complete IT</li>
</ul></li>
<li>stm3210e_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>Update to support SDHC memory cards with capacity greater than 4 GB
<ul>
<li>SD_CardInfo structure, define CardCapacity variable as 64-bit long (instead of 32-bit)</li>
<li>Declare ReadAddr and WriteAddr parameters in SD_ReadBlock(),SD_WriteBlock(), SD_ReadMultiBlocks() and SD_WriteMultiBlocks() as 64-bit long (instead of 32-bit)</li>
</ul></li>
<li>Refer to the driver header files comments for more information on how to use the provided API.</li>
</ul></li>
<li>stm3210e_eval_fsmc_nor.c
<ul>
<li>NOR_ProgramBuffer() function: remove this comment “This function must be used only with S29GL128P NOR memory.”</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-8">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-9">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-Mars-2011</label>
<div>
<h2 id="main-changes-10">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-Mars-2011</label>
<div>
<h2 id="main-changes-11">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-12">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-Octobre-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,470 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval.h
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file contains definitions for STM3210C_EVAL's LEDs,
* push-buttons and COM ports hardware resources.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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.
*
******************************************************************************
*/
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @addtogroup STM3210C_EVAL_COMMON
* @{
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM3210C_EVAL_H
#define __STM3210C_EVAL_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
#ifdef HAL_I2C_MODULE_ENABLED
#include "stm3210c_eval_io.h"
#endif /* HAL_I2C_MODULE_ENABLED */
/** @defgroup STM3210C_EVAL_Exported_Types STM3210C EVAL Exported Types
* @{
*/
/**
* @brief LED Types Definition
*/
typedef enum
{
LED1 = 0,
LED2 = 1,
LED3 = 2,
LED4 = 3,
LED_GREEN = LED1,
LED_ORANGE = LED2,
LED_RED = LED3,
LED_BLUE = LED4
} Led_TypeDef;
/**
* @brief BUTTON Types Definition
*/
typedef enum
{
BUTTON_WAKEUP = 0,
BUTTON_TAMPER = 1,
BUTTON_KEY = 2,
} Button_TypeDef;
typedef enum
{
BUTTON_MODE_GPIO = 0,
BUTTON_MODE_EXTI = 1
} ButtonMode_TypeDef;
/**
* @brief JOYSTICK Types Definition
*/
typedef enum
{
JOY_SEL = 0,
JOY_LEFT = 1,
JOY_RIGHT = 2,
JOY_DOWN = 3,
JOY_UP = 4,
JOY_NONE = 5
}JOYState_TypeDef;
typedef enum
{
JOY_MODE_GPIO = 0,
JOY_MODE_EXTI = 1
}JOYMode_TypeDef;
/**
* @brief COM Types Definition
*/
typedef enum
{
COM1 = 0,
COM2 = 1
} COM_TypeDef;
/**
* @}
*/
/** @defgroup STM3210C_EVAL_Exported_Constants STM3210C EVAL Exported Constants
* @{
*/
/**
* @brief Define for STM3210C_EVAL board
*/
#if !defined (USE_STM3210C_EVAL)
#define USE_STM3210C_EVAL
#endif
/** @addtogroup STM3210C_EVAL_LED STM3210C EVAL LED
* @{
*/
#define LEDn 4
#define LED1_PIN GPIO_PIN_7 /* PD.07*/
#define LED1_GPIO_PORT GPIOD
#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
#define LED2_PIN GPIO_PIN_13 /* PD.13*/
#define LED2_GPIO_PORT GPIOD
#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
#define LED3_PIN GPIO_PIN_3 /* PD.03*/
#define LED3_GPIO_PORT GPIOD
#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
#define LED4_PIN GPIO_PIN_4 /* PD.04*/
#define LED4_GPIO_PORT GPIOD
#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
#define LEDx_GPIO_CLK_ENABLE(__LED__) do { if ((__LED__) == LED1) LED1_GPIO_CLK_ENABLE(); else \
if ((__LED__) == LED2) LED2_GPIO_CLK_ENABLE(); else \
if ((__LED__) == LED3) LED3_GPIO_CLK_ENABLE(); else \
if ((__LED__) == LED4) LED4_GPIO_CLK_ENABLE();} while(0)
#define LEDx_GPIO_CLK_DISABLE(__LED__) (((__LED__) == LED1) ? LED1_GPIO_CLK_DISABLE() :\
((__LED__) == LED2) ? LED2_GPIO_CLK_DISABLE() :\
((__LED__) == LED3) ? LED3_GPIO_CLK_DISABLE() :\
((__LED__) == LED4) ? LED4_GPIO_CLK_DISABLE() : 0 )
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_BUTTON STM3210C EVAL BUTTON
* @{
*/
#define BUTTONn 3
/**
* @brief Tamper push-button
*/
#define TAMPER_BUTTON_PIN GPIO_PIN_13 /* PC.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_9 /* PB.09*/
#define KEY_BUTTON_GPIO_PORT GPIOB
#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
#define KEY_BUTTON_EXTI_IRQn EXTI9_5_IRQn
/**
* @brief Wake-up push-button
*/
#define WAKEUP_BUTTON_PIN GPIO_PIN_0 /* PA.00*/
#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
#define BUTTONx_GPIO_CLK_ENABLE(__BUTTON__) do { if ((__BUTTON__) == BUTTON_TAMPER) TAMPER_BUTTON_GPIO_CLK_ENABLE() ; else \
if ((__BUTTON__) == BUTTON_KEY) KEY_BUTTON_GPIO_CLK_ENABLE() ; else \
if ((__BUTTON__) == BUTTON_WAKEUP) WAKEUP_BUTTON_GPIO_CLK_ENABLE();} while(0)
#define BUTTONx_GPIO_CLK_DISABLE(__BUTTON__) (((__BUTTON__) == BUTTON_TAMPER) TAMPER_BUTTON_GPIO_CLK_DISABLE() :\
((__BUTTON__) == BUTTON_KEY) KEY_BUTTON_GPIO_CLK_DISABLE() :\
((__BUTTON__) == BUTTON_WAKEUP) WAKEUP_BUTTON_GPIO_CLK_DISABLE() : 0 )
/**
* @brief IO Pins definition
*/
/* Joystick */
#define JOY_SEL_PIN (IO2_PIN_7) /* IO_Expander_2 */
#define JOY_DOWN_PIN (IO2_PIN_6) /* IO_Expander_2 */
#define JOY_LEFT_PIN (IO2_PIN_5) /* IO_Expander_2 */
#define JOY_RIGHT_PIN (IO2_PIN_4) /* IO_Expander_2 */
#define JOY_UP_PIN (IO2_PIN_3) /* IO_Expander_2 */
#define JOY_NONE_PIN JOY_ALL_PINS
#define JOY_ALL_PINS (JOY_SEL_PIN | JOY_DOWN_PIN | JOY_LEFT_PIN | JOY_RIGHT_PIN | JOY_UP_PIN)
/* MEMS */
#define MEMS_INT1_PIN (IO1_PIN_3) /* IO_Expander_1 */ /* Input */
#define MEMS_INT2_PIN (IO1_PIN_2) /* IO_Expander_1 */ /* Input */
#define MEMS_ALL_PINS (MEMS_INT1_PIN | MEMS_INT2_PIN)
#define AUDIO_RESET_PIN (IO2_PIN_2) /* IO_Expander_2 */ /* Output */
#define MII_INT_PIN (IO2_PIN_0) /* IO_Expander_2 */ /* Output */
#define VBAT_DIV_PIN (IO1_PIN_0) /* IO_Expander_1 */ /* Output */
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_COM STM3210C EVAL COM
* @{
*/
#define COMn 1
/**
* @brief Definition for COM port1, connected to USART2
*/
#define EVAL_COM1 USART2
#define EVAL_COM1_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE()
#define EVAL_COM1_CLK_DISABLE() __HAL_RCC_USART2_CLK_DISABLE()
#define AFIOCOM1_CLK_ENABLE() __HAL_RCC_AFIO_CLK_ENABLE()
#define AFIOCOM1_CLK_DISABLE() __HAL_RCC_AFIO_CLK_DISABLE()
#define EVAL_COM1_TX_PIN GPIO_PIN_5 /* PD.05*/
#define EVAL_COM1_TX_GPIO_PORT GPIOD
#define EVAL_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define EVAL_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
#define EVAL_COM1_RX_PIN GPIO_PIN_6 /* PD.06*/
#define EVAL_COM1_RX_GPIO_PORT GPIOD
#define EVAL_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define EVAL_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
#define EVAL_COM1_IRQn USART2_IRQn
#define COMx_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) EVAL_COM1_CLK_ENABLE();} while(0)
#define COMx_CLK_DISABLE(__INDEX__) (((__INDEX__) == COM1) ? EVAL_COM1_CLK_DISABLE() : 0)
#define AFIOCOMx_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) AFIOCOM1_CLK_ENABLE();} while(0)
#define AFIOCOMx_CLK_DISABLE(__INDEX__) (((__INDEX__) == COM1) ? AFIOCOM1_CLK_DISABLE() : 0)
#define AFIOCOMx_REMAP(__INDEX__) (((__INDEX__) == COM1) ? (AFIO->MAPR |= (AFIO_MAPR_USART2_REMAP)) : 0)
#define COMx_TX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) EVAL_COM1_TX_GPIO_CLK_ENABLE();} while(0)
#define COMx_TX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == COM1) ? EVAL_COM1_TX_GPIO_CLK_DISABLE() : 0)
#define COMx_RX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) EVAL_COM1_RX_GPIO_CLK_ENABLE();} while(0)
#define COMx_RX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == COM1) ? EVAL_COM1_RX_GPIO_CLK_DISABLE() : 0)
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_BUS STM3210C EVAL BUS
* @{
*/
/**
* @brief IO Expander Interrupt line on EXTI
*/
#define IOE_IT_PIN GPIO_PIN_14
#define IOE_IT_GPIO_PORT GPIOB
#define IOE_IT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define IOE_IT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
#define IOE_IT_EXTI_IRQn EXTI15_10_IRQn
#define IOE_IT_EXTI_IRQHANDLER EXTI15_10_IRQHandler
/* Exported constant IO ------------------------------------------------------*/
#define IO1_I2C_ADDRESS 0x82
#define IO2_I2C_ADDRESS 0x88
#define TS_I2C_ADDRESS 0x82
/*The Slave ADdress (SAD) associated to the LIS302DL is 001110xb. SDO pad can be used
to modify less significant bit of the device address. If SDO pad is connected to voltage
supply LSb is 1 (address 0011101b) else if SDO pad is connected to ground LSb value is
0 (address 0011100b).*/
#define L1S302DL_I2C_ADDRESS 0x38
/*##################### ACCELEROMETER ##########################*/
/* Read/Write command */
#define READWRITE_CMD ((uint8_t)0x80)
/* Multiple byte read/write command */
#define MULTIPLEBYTE_CMD ((uint8_t)0x40)
/*##################### I2Cx ###################################*/
/* User can use this section to tailor I2Cx instance used and associated
resources */
/* Definition for I2Cx Pins */
#define EVAL_I2Cx_SCL_PIN GPIO_PIN_6 /* PB.06*/
#define EVAL_I2Cx_SCL_GPIO_PORT GPIOB
#define EVAL_I2Cx_SDA_PIN GPIO_PIN_7 /* PB.07*/
#define EVAL_I2Cx_SDA_GPIO_PORT GPIOB
/* Definition for I2Cx clock resources */
#define EVAL_I2Cx I2C1
#define EVAL_I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE()
#define EVAL_I2Cx_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define EVAL_I2Cx_SCL_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's NVIC */
#define EVAL_I2Cx_EV_IRQn I2C1_EV_IRQn
#define EVAL_I2Cx_EV_IRQHandler I2C1_EV_IRQHandler
#define EVAL_I2Cx_ER_IRQn I2C1_ER_IRQn
#define EVAL_I2Cx_ER_IRQHandler I2C1_ER_IRQHandler
/* I2C clock speed configuration (in Hz) */
#ifndef BSP_I2C_SPEED
#define BSP_I2C_SPEED 400000
#endif /* I2C_SPEED */
/* Maximum Timeout values for flags waiting loops. These timeouts are not based
on accurate values, they just guarantee that the application will not remain
stuck if the I2C communication is corrupted.
You may modify these timeout values depending on CPU frequency and application
conditions (interrupts routines ...). */
#define EVAL_I2Cx_TIMEOUT_MAX 3000
/*##################### SPI3 ###################################*/
#define EVAL_SPIx SPI3
#define EVAL_SPIx_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE()
#define EVAL_SPIx_SCK_GPIO_PORT GPIOC /* PC.10*/
#define EVAL_SPIx_SCK_PIN GPIO_PIN_10
#define EVAL_SPIx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define EVAL_SPIx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
#define EVAL_SPIx_MISO_MOSI_GPIO_PORT GPIOC
#define EVAL_SPIx_MISO_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define EVAL_SPIx_MISO_MOSI_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
#define EVAL_SPIx_MISO_PIN GPIO_PIN_11 /* PC.11*/
#define EVAL_SPIx_MOSI_PIN GPIO_PIN_12 /* PC.12*/
/* Maximum Timeout values for flags waiting loops. These timeouts 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 EVAL_SPIx_TIMEOUT_MAX 1000
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_COMPONENT STM3210C EVAL COMPONENT
* @{
*/
/*##################### LCD ###################################*/
/* Chip Select macro definition */
#define LCD_CS_LOW() HAL_GPIO_WritePin(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, GPIO_PIN_RESET)
#define LCD_CS_HIGH() HAL_GPIO_WritePin(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, GPIO_PIN_SET)
/**
* @brief LCD Control Interface pins
*/
#define LCD_NCS_PIN GPIO_PIN_2 /* PB.02*/
#define LCD_NCS_GPIO_PORT GPIOB
#define LCD_NCS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define LCD_NCS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
/*##################### SD ###################################*/
/* Chip Select macro definition */
#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 SD Control Interface pins
*/
#define SD_CS_PIN GPIO_PIN_4 /* PA.04*/
#define SD_CS_GPIO_PORT GPIOA
#define SD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define SD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
/**
* @brief SD Detect Interface pins
*/
#define SD_DETECT_PIN GPIO_PIN_0
#define SD_DETECT_GPIO_PORT GPIOE
#define SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
#define SD_DETECT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE()
#define SD_DETECT_EXTI_IRQn EXTI0_IRQn
/*##################### AUDIO ##########################*/
/**
* @brief AUDIO I2C Interface pins
*/
#define AUDIO_I2C_ADDRESS 0x94
/**
* @}
*/
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_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);
#ifdef HAL_UART_MODULE_ENABLED
void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef* huart);
#endif /* HAL_UART_MODULE_ENABLED */
#ifdef HAL_I2C_MODULE_ENABLED
uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode);
JOYState_TypeDef BSP_JOY_GetState(void);
#endif /* HAL_I2C_MODULE_ENABLED */
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210C_EVAL_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,195 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_accelerometer.c
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file provides a set of functions needed to manage the ACCELEROMETER
* MEMS accelerometer available on STM3210C_EVAL board.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 "stm3210c_eval_accelerometer.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @defgroup STM3210C_EVAL_ACCELEROMETER STM3210C EVAL ACCELEROMETER
* @brief This file includes the motion sensor driver for ACCELEROMETER motion sensor
* devices.
* @{
*/
/** @defgroup STM3210C_EVAL_ACCELEROMETER_Private_Variables STM3210C EVAL ACCELEROMETER Private Variables
* @{
*/
static ACCELERO_DrvTypeDef *AcceleroDrv;
/**
* @}
*/
/** @defgroup STM3210C_EVAL_ACCELEROMETER_Exported_Functions STM3210C EVAL ACCELEROMETER Exported Functions
* @{
*/
/**
* @brief Set ACCELEROMETER Initialization.
*/
uint8_t BSP_ACCELERO_Init(void)
{
uint8_t ret = ACCELERO_ERROR;
uint16_t ctrl = 0x0000;
LIS302DL_InitTypeDef lis302dl_initstruct;
LIS302DL_FilterConfigTypeDef lis302dl_filter={0,0,0};
if(Lis302dlDrv.ReadID() == I_AM_LIS302DL)
{
/* Initialize the gyroscope driver structure */
AcceleroDrv = &Lis302dlDrv;
/* Set configuration of LIS302DL MEMS Accelerometer *********************/
lis302dl_initstruct.Power_Mode = LIS302DL_LOWPOWERMODE_ACTIVE;
lis302dl_initstruct.Output_DataRate = LIS302DL_DATARATE_100;
lis302dl_initstruct.Axes_Enable = LIS302DL_XYZ_ENABLE;
lis302dl_initstruct.Full_Scale = LIS302DL_FULLSCALE_2_3;
lis302dl_initstruct.Self_Test = LIS302DL_SELFTEST_NORMAL;
/* Configure MEMS: data rate, power mode, full scale, self test and axes */
ctrl = (uint16_t) (lis302dl_initstruct.Output_DataRate | lis302dl_initstruct.Power_Mode | \
lis302dl_initstruct.Full_Scale | lis302dl_initstruct.Self_Test | \
lis302dl_initstruct.Axes_Enable);
/* Configure the accelerometer main parameters */
AcceleroDrv->Init(ctrl);
/* MEMS High Pass Filter configuration */
lis302dl_filter.HighPassFilter_Data_Selection = LIS302DL_FILTEREDDATASELECTION_OUTPUTREGISTER;
lis302dl_filter.HighPassFilter_CutOff_Frequency = LIS302DL_HIGHPASSFILTER_LEVEL_1;
lis302dl_filter.HighPassFilter_Interrupt = LIS302DL_HIGHPASSFILTERINTERRUPT_1_2;
/* Configure MEMS high pass filter cut-off level, interrupt and data selection bits */
ctrl = (uint8_t)(lis302dl_filter.HighPassFilter_Data_Selection | \
lis302dl_filter.HighPassFilter_CutOff_Frequency | \
lis302dl_filter.HighPassFilter_Interrupt);
/* Configure the accelerometer LPF main parameters */
AcceleroDrv->FilterConfig(ctrl);
ret = ACCELERO_OK;
}
else
{
ret = ACCELERO_ERROR;
}
return ret;
}
/**
* @brief Read ID of Accelerometer component
* @retval ID
*/
uint8_t BSP_ACCELERO_ReadID(void)
{
uint8_t id = 0x00;
if(AcceleroDrv->ReadID != NULL)
{
id = AcceleroDrv->ReadID();
}
return id;
}
/**
* @brief Reboot memory content of ACCELEROMETER
*/
void BSP_ACCELERO_Reset(void)
{
if(AcceleroDrv->Reset != NULL)
{
AcceleroDrv->Reset();
}
}
/**
* @brief Config Accelerometer click IT
*/
void BSP_ACCELERO_Click_ITConfig(void)
{
if(AcceleroDrv->ConfigIT!= NULL)
{
AcceleroDrv->ConfigIT();
}
}
/**
* @brief Clear Accelerometer click IT
*/
void BSP_ACCELERO_Click_ITClear(void)
{
if(AcceleroDrv->ClearIT!= NULL)
{
AcceleroDrv->ClearIT();
}
}
/**
* @brief Get XYZ acceleration
* @param pDataXYZ: angular acceleration on X/Y/Z axis
*/
void BSP_ACCELERO_GetXYZ(int16_t *pDataXYZ)
{
int16_t SwitchXY = 0;
if(AcceleroDrv->GetXYZ!= NULL)
{
AcceleroDrv->GetXYZ(pDataXYZ);
/* Switch X and Y Axis in case of MEMS LIS302DL */
if(AcceleroDrv == &Lis302dlDrv)
{
SwitchXY = pDataXYZ[0];
pDataXYZ[0] = pDataXYZ[1];
/* Invert Y Axis to be conpliant with LIS3DSH */
pDataXYZ[1] = -SwitchXY;
}
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,91 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_accelerometer.h
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file contains all the functions prototypes for the stm3210c_eval_accelerometer.c
* firmware driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210C_EVAL_ACCELEROMETER_H
#define __STM3210C_EVAL_ACCELEROMETER_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm3210c_eval.h"
/* Include Accelerometer component driver */
#include "../Components/lis302dl/lis302dl.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @addtogroup STM3210C_EVAL_ACCELEROMETER
* @{
*/
/** @defgroup STM3210C_EVAL_ACCELEROMETER_Exported_Types STM3210C EVAL ACCELEROMETER Exported Types
* @{
*/
typedef enum
{
ACCELERO_OK = 0,
ACCELERO_ERROR = 1,
ACCELERO_TIMEOUT = 2
}
ACCELERO_StatusTypeDef;
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_ACCELEROMETER_Exported_Functions
* @{
*/
/* Acc functions */
uint8_t BSP_ACCELERO_Init(void);
uint8_t BSP_ACCELERO_ReadID(void);
void BSP_ACCELERO_Reset(void);
void BSP_ACCELERO_Click_ITConfig(void);
void BSP_ACCELERO_Click_ITClear(void);
void BSP_ACCELERO_GetXYZ(int16_t *pDataXYZ);
#endif /* __STM3210C_EVAL_ACCELEROMETER_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,609 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_audio.c
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file provides the Audio driver for the STM3210C-Eval
* board.
@verbatim
==============================================================================
##### How to use this driver #####
==============================================================================
[..]
(#) This driver supports STM32F107xC devices on STM3210C-Eval Kit:
(++) to play an audio file (all functions names start by BSP_AUDIO_OUT_xxx)
[..]
(#) PLAY A FILE:
(++) 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 (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 BSP_AUDIO_OUT_XXXCallBack() and only
their prototypes are declared in the stm3210c_eval_audio.h file.
(refer to the example for more details on the callbacks implementations)
(++) To Stop playing, to modify the volume level, the frequency 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
stm3210c_eval_audio.h file.
(++) This driver provide the High Audio Layer: consists of the function API
exported in the stm3210c_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 stm3210c_eval_audio.c file (I2SOUT_Init()...)
[..]
##### Known Limitations #####
==============================================================================
(#) 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.
(#) 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 BSP_AUDIO_OUT_SetMute()or BSP_AUDIO_OUT_SetOutputMode()).
When the audio data is played, no communication is required with the audio codec.
(#) 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.
(#) Mono audio streaming is not supported (in order 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).
(#) Supports only 16-bit audio data size.
@endverbatim
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 "stm3210c_eval_audio.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @defgroup STM3210C_EVAL_AUDIO STM3210C EVAL AUDIO
* @brief This file includes the low layer audio driver available on STM3210C-Eval
* eval board.
* @{
*/
/** @defgroup STM3210C_EVAL_AUDIO_Private_Variables STM3210C EVAL AUDIO Private Variables
* @{
*/
/*### PLAY ###*/
static AUDIO_DrvTypeDef *pAudioDrv;
I2S_HandleTypeDef hAudioOutI2s;
/**
* @}
*/
/** @defgroup STM3210C_EVAL_AUDIO_Private_Function_Prototypes STM3210C EVAL AUDIO Private Function Prototypes
* @{
*/
static void I2SOUT_Init(uint32_t AudioFreq);
static void I2SOUT_DeInit(void);
/**
* @}
*/
/** @defgroup STM3210C_EVAL_AUDIO_OUT_Exported_Functions STM3210C EVAL AUDIO OUT Exported Functions
* @{
*/
/**
* @brief Configure 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.
* @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 */
I2SOUT_DeInit();
/* I2S data transfer preparation:
Prepare the Media to be used for the audio transfer from memory to I2S peripheral */
hAudioOutI2s.Instance = I2SOUT;
if(HAL_I2S_GetState(&hAudioOutI2s) == HAL_I2S_STATE_RESET)
{
/* Init the I2S MSP: this __weak function can be redefined by the application*/
BSP_AUDIO_OUT_MspInit(&hAudioOutI2s, NULL);
}
/* Configure the I2S peripheral */
I2SOUT_Init(AudioFreq);
if(((cs43l22_drv.ReadID(AUDIO_I2C_ADDRESS)) & CS43L22_ID_MASK) == CS43L22_ID)
{
/* Initialize the audio driver structure */
pAudioDrv = &cs43l22_drv;
ret = AUDIO_OK;
}
else
{
ret = AUDIO_ERROR;
}
if(ret == AUDIO_OK)
{
pAudioDrv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq);
}
return ret;
}
/**
* @brief De-initialize the audio peripherals.
*/
void BSP_AUDIO_OUT_DeInit(void)
{
I2SOUT_DeInit();
/* DeInit the I2S MSP : this __weak function can be rewritten by the application */
BSP_AUDIO_OUT_MspDeInit(&hAudioOutI2s, 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(pAudioDrv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Update the Media layer and enable it for play */
HAL_I2S_Transmit_DMA(&hAudioOutI2s, pBuffer, DMA_MAX(Size));
return AUDIO_OK;
}
}
/**
* @brief Sends n-Bytes on the I2S interface.
* @param pData: pointer on 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(&hAudioOutI2s, pData, Size);
}
/**
* @brief This function Pauses the audio file stream. In case
* of using DMA, the DMA Pause feature is used.
* @note 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(pAudioDrv->Pause(AUDIO_I2C_ADDRESS) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Call the Media layer pause function */
HAL_I2S_DMAPause(&hAudioOutI2s);
/* Return AUDIO_OK if all operations are OK */
return AUDIO_OK;
}
}
/**
* @brief This function Resumes the audio file stream.
* @note 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(pAudioDrv->Resume(AUDIO_I2C_ADDRESS) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Call the Media layer resume function */
HAL_I2S_DMAResume(&hAudioOutI2s);
/* Return AUDIO_OK if all operations are OK */
return AUDIO_OK;
}
}
/**
* @brief Stops audio playing and Power down the Audio Codec.
* @param Option: could be one of the following parameters
* - 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 DMA Stop to disable DMA stream before stopping codec */
HAL_I2S_DMAStop(&hAudioOutI2s);
/* Call Audio Codec Stop function */
if(pAudioDrv->Stop(AUDIO_I2C_ADDRESS, Option) != 0)
{
return AUDIO_ERROR;
}
else
{
if(Option == CODEC_PDWN_HW)
{
/* Wait at least 100us */
HAL_Delay(1);
/* Power Down the codec */
BSP_IO_WritePin(AUDIO_RESET_PIN, GPIO_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(pAudioDrv->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(pAudioDrv->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(pAudioDrv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Return AUDIO_OK when all operations are correctly done */
return AUDIO_OK;
}
}
/**
* @brief Update the audio frequency.
* @param AudioFreq: Audio frequency used to play the audio stream.
* @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the
* audio frequency.
*/
void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq)
{
/* Update the I2S audio frequency configuration */
I2SOUT_Init(AudioFreq);
}
/**
* @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 gpioinitstruct = {0};
/* Enable I2SOUT clock */
I2SOUT_CLK_ENABLE();
/*** Configure the GPIOs ***/
/* Enable I2S GPIO clocks */
I2SOUT_SCK_SD_CLK_ENABLE();
I2SOUT_WS_CLK_ENABLE();
/* I2SOUT pins configuration: WS, SCK and SD pins -----------------------------*/
gpioinitstruct.Pin = I2SOUT_SCK_PIN | I2SOUT_SD_PIN;
gpioinitstruct.Mode = GPIO_MODE_AF_PP;
gpioinitstruct.Pull = GPIO_NOPULL;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
HAL_GPIO_Init(I2SOUT_SCK_SD_GPIO_PORT, &gpioinitstruct);
gpioinitstruct.Pin = I2SOUT_WS_PIN ;
HAL_GPIO_Init(I2SOUT_WS_GPIO_PORT, &gpioinitstruct);
/* I2SOUT pins configuration: MCK pin */
I2SOUT_MCK_CLK_ENABLE();
gpioinitstruct.Pin = I2SOUT_MCK_PIN;
HAL_GPIO_Init(I2SOUT_MCK_GPIO_PORT, &gpioinitstruct);
/* Enable the I2S DMA clock */
I2SOUT_DMAx_CLK_ENABLE();
if(hi2s->Instance == I2SOUT)
{
/* Configure the hdma_i2stx handle parameters */
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 = I2SOUT_DMAx_PERIPH_DATA_SIZE;
hdma_i2stx.Init.MemDataAlignment = I2SOUT_DMAx_MEM_DATA_SIZE;
hdma_i2stx.Init.Mode = DMA_NORMAL;
hdma_i2stx.Init.Priority = DMA_PRIORITY_HIGH;
hdma_i2stx.Instance = I2SOUT_DMAx_CHANNEL;
/* Associate the DMA handle */
__HAL_LINKDMA(hi2s, hdmatx, hdma_i2stx);
/* Deinitialize the Channel for new transfer */
HAL_DMA_DeInit(&hdma_i2stx);
/* Configure the DMA Channel */
HAL_DMA_Init(&hdma_i2stx);
}
/* I2S DMA IRQ Channel configuration */
HAL_NVIC_SetPriority(I2SOUT_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0);
HAL_NVIC_EnableIRQ(I2SOUT_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 gpioinitstruct;
/* Disable I2S clock */
I2SOUT_CLK_DISABLE();
/* CODEC_I2S pins configuration: WS, SCK and SD pins */
gpioinitstruct.Pin = I2SOUT_WS_PIN | I2SOUT_SCK_PIN | I2SOUT_SD_PIN;
HAL_GPIO_DeInit(I2SOUT_SCK_SD_GPIO_PORT, gpioinitstruct.Pin);
/* CODEC_I2S pins configuration: MCK pin */
gpioinitstruct.Pin = I2SOUT_MCK_PIN;
HAL_GPIO_DeInit(I2SOUT_MCK_GPIO_PORT, gpioinitstruct.Pin);
}
/**
* @brief Tx Transfer completed callbacks
* @param hi2s: I2S handle
*/
void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s)
{
if(hi2s->Instance == I2SOUT)
{
/* Manage the remaining file size and new address offset: This function
should be coded by user (its prototype is already declared in stm3210c_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)
{
if(hi2s->Instance == I2SOUT)
{
/* Manage the remaining file size and new address offset: This function
should be coded by user (its prototype is already declared in stm3210c_eval_audio.h) */
BSP_AUDIO_OUT_HalfTransfer_CallBack();
}
}
/**
* @brief I2S error callbacks
* @param hi2s: I2S handle
*/
void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s)
{
/* Manage the error generated on DMA FIFO: This function
should be coded by user (its prototype is already declared in stm3210c_eval_audio.h) */
if(hi2s->Instance == I2SOUT)
{
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 Function
*******************************************************************************/
/**
* @brief Initializes the Audio Codec audio interface (I2S)
* @param AudioFreq: Audio frequency to be configured for the I2S peripheral.
*/
static void I2SOUT_Init(uint32_t AudioFreq)
{
/* Initialize the hAudioOutI2s Instance parameter */
hAudioOutI2s.Instance = I2SOUT;
/* Disable I2S block */
__HAL_I2S_DISABLE(&hAudioOutI2s);
/* I2SOUT peripheral configuration */
hAudioOutI2s.Init.AudioFreq = AudioFreq;
hAudioOutI2s.Init.CPOL = I2S_CPOL_LOW;
hAudioOutI2s.Init.DataFormat = I2S_DATAFORMAT_16B;
hAudioOutI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE;
hAudioOutI2s.Init.Mode = I2S_MODE_MASTER_TX;
hAudioOutI2s.Init.Standard = I2S_STANDARD;
/* Initialize the I2S peripheral with the structure above */
HAL_I2S_Init(&hAudioOutI2s);
}
/**
* @brief Deinitialize the Audio Codec audio interface (I2S).
*/
static void I2SOUT_DeInit(void)
{
/* Initialize the hAudioOutI2s Instance parameter */
hAudioOutI2s.Instance = I2SOUT;
/* Disable I2S peripheral */
__HAL_I2S_DISABLE(&hAudioOutI2s);
HAL_I2S_DeInit(&hAudioOutI2s);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,168 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_audio.h
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* stm3210c_eval_audio.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210C_EVAL_AUDIO_H
#define __STM3210C_EVAL_AUDIO_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
/* Include audio component Driver */
#include "../Components/cs43l22/cs43l22.h"
#include "stm3210c_eval.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @addtogroup STM3210C_EVAL_AUDIO
* @{
*/
/** @defgroup STM3210C_EVAL_AUDIO_OUT_Exported_Constants STM3210C EVAL AUDIO OUT Exported Constants
* @{
*/
/*------------------------------------------------------------------------------
AUDIO OUT CONFIGURATION
------------------------------------------------------------------------------*/
/* I2S peripheral configuration defines */
#define I2SOUT SPI2
#define I2SOUT_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE()
#define I2SOUT_CLK_DISABLE() __HAL_RCC_SPI2_CLK_DISABLE()
#define I2SOUT_SCK_SD_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define I2SOUT_MCK_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define I2SOUT_WS_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define I2SOUT_WS_PIN GPIO_PIN_12 /* PB.12*/
#define I2SOUT_SCK_PIN GPIO_PIN_13 /* PB.13*/
#define I2SOUT_SD_PIN GPIO_PIN_15 /* PB.15*/
#define I2SOUT_MCK_PIN GPIO_PIN_6 /* PC.06*/
#define I2SOUT_SCK_SD_GPIO_PORT GPIOB
#define I2SOUT_WS_GPIO_PORT GPIOB
#define I2SOUT_MCK_GPIO_PORT GPIOC
/* I2S DMA Channel definitions */
#define I2SOUT_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE()
#define I2SOUT_DMAx_CHANNEL DMA1_Channel5
#define I2SOUT_DMAx_IRQ DMA1_Channel5_IRQn
#define I2SOUT_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD
#define I2SOUT_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD
#define DMA_MAX_SZE 0xFFFF
#define I2SOUT_IRQHandler DMA1_Channel5_IRQHandler
/* Select the interrupt preemption priority and subpriority for the DMA interrupt */
#define AUDIO_OUT_IRQ_PREPRIO 0xE /* Select the preemption priority level(0 is the highest) */
/*------------------------------------------------------------------------------
CONFIGURATION: Audio Driver Configuration parameters
------------------------------------------------------------------------------*/
/* Audio status definition */
#define AUDIO_OK 0
#define AUDIO_ERROR 1
#define AUDIO_TIMEOUT 2
/* PDM buffer input size */
#define INTERNAL_BUFF_SIZE 128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR
/*------------------------------------------------------------------------------
OPTIONAL Configuration defines parameters
------------------------------------------------------------------------------*/
/**
* @}
*/
/** @defgroup STM3210C_EVAL_AUDIO_Exported_Macros STM3210C EVAL AUDIO Exported Macros
* @{
*/
#define DMA_MAX(_X_) (((_X_) <= DMA_MAX_SZE)? (_X_):DMA_MAX_SZE)
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_AUDIO_OUT_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 Command);
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
need to be changed for specific application needs */
void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params);
void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210C_EVAL_AUDIO_H */

View File

@ -1,501 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_eeprom.c
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file provides a set of functions needed to manage a M24C64
* I2C EEPROM memory.
*
* ===================================================================
* Notes:
* - This driver is intended for STM32F1xx families devices only.
* - The I2C EEPROM memory (M24CXX) is available directly
* on STM3210C EVAL board.
* ===================================================================
*
* It implements a high level communication layer for read and write
* from/to this memory. The needed STM32F10x hardware resources (I2C
* and GPIO) are defined in stm3210c_eval.h file,
* and the initialization is performed
* in EEPROM_I2C_IO_Init() functions
* declared in stm3210c_eval.c file.
* You can easily tailor this driver to any other development board,
* by just adapting the defines for hardware resources and
* EEPROM_I2C_IO_Init() functions.
*
* @note In this driver, basic read and write functions
* (BSP_EEPROM_ReadBuffer() and BSP_EEPROM_WriteBuffer())
* use Polling mode to perform the data transfer to/from EEPROM memories.
* +-----------------------------------------------------------------+
* | Pin assignment for M24CXX EEPROM |
* +---------------------------------------+-----------+-------------+
* | STM32F1xx I2C Pins | EEPROM | Pin |
* +---------------------------------------+-----------+-------------+
* | EEPROM_I2C_SDA_PIN/ SDA | SDA | 5 |
* | EEPROM_I2C_SCL_PIN/ SCL | SCL | 6 |
* | . | VDD | 7 (3.3V) |
* | . | GND | 8 (0 V) |
* +---------------------------------------+-----------+-------------+
*
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 "stm3210c_eval_eeprom.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @defgroup STM3210C_EVAL_EEPROM STM3210C EVAL EEPROM
* @brief This file includes the I2C and SPI EEPROM driver
* of STM3210C-EVAL board.
* @{
*/
/** @defgroup STM3210C_EVAL_EEPROM_Private_Variables STM3210C EVAL EEPROM Private Variables
* @{
*/
__IO uint16_t EEPROMAddress = 0;
__IO uint16_t EEPROMPageSize = 0;
__IO uint16_t EEPROMDataRead = 0;
__IO uint8_t EEPROMDataWrite = 0;
static EEPROM_DrvTypeDef *EEPROM_SelectedDevice = 0;
/**
* @}
*/
/** @defgroup STM3210C_EVAL_EEPROM_Private_Function_Prototypes STM3210C EVAL EEPROM Private Function Prototypes
* @{
*/
static uint32_t EEPROM_I2C_Init(void);
static uint32_t EEPROM_I2C_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint32_t* NumByteToRead);
static uint32_t EEPROM_I2C_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint32_t* NumByteToWrite);
static uint32_t EEPROM_I2C_WaitEepromStandbyState(void);
/* EEPROM I2C driver typedef */
EEPROM_DrvTypeDef EEPROM_I2C_Drv =
{
EEPROM_I2C_Init,
EEPROM_I2C_ReadBuffer,
EEPROM_I2C_WritePage
};
/**
* @}
*/
/** @defgroup STM3210C_EVAL_EEPROM_Exported_Functions STM3210C EVAL EEPROM Exported Functions
* @{
*/
/**
* @brief Initializes peripherals used by the EEPROM device selected.
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
* different from EEPROM_OK (0)
*/
uint32_t BSP_EEPROM_Init(void)
{
if(EEPROM_SelectedDevice->Init != 0)
{
return (EEPROM_SelectedDevice->Init());
}
else
{
return EEPROM_FAIL;
}
}
/**
* @brief Select the EEPROM device to communicate.
* @param DeviceID: Specifies the EEPROM device to be selected.
* This parameter can be one of following parameters:
* @arg BSP_EEPROM_M24C64_32
* @arg BSP_EEPROM_M24C08
*
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
* different from EEPROM_OK (0)
*/
void BSP_EEPROM_SelectDevice(uint8_t DeviceID)
{
switch(DeviceID)
{
case BSP_EEPROM_M24C64_32:
case BSP_EEPROM_M24C08:
EEPROM_SelectedDevice = &EEPROM_I2C_Drv;
break;
default:
break;
}
}
/**
* @brief Reads a block of data from the EEPROM device selected.
* @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, uint32_t* NumByteToRead)
{
if(EEPROM_SelectedDevice->ReadBuffer != 0)
{
return (EEPROM_SelectedDevice->ReadBuffer(pBuffer, ReadAddr, NumByteToRead));
}
else
{
return EEPROM_FAIL;
}
}
/**
* @brief Writes buffer of data to the EEPROM device selected.
* @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, uint32_t NumByteToWrite)
{
uint16_t numofpage = 0, numofsingle = 0, count = 0;
uint16_t addr = 0;
uint32_t dataindex = 0;
uint32_t status = EEPROM_OK;
addr = WriteAddr % EEPROMPageSize;
count = EEPROMPageSize - addr;
numofpage = NumByteToWrite / EEPROMPageSize;
numofsingle = NumByteToWrite % EEPROMPageSize;
if(EEPROM_SelectedDevice->WritePage == 0)
{
return EEPROM_FAIL;
}
/*!< 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_SelectedDevice->WritePage(pBuffer, WriteAddr, (uint32_t*)(&dataindex));
if (status != EEPROM_OK)
{
return status;
}
}
/*!< If NumByteToWrite > EEPROM_PAGESIZE */
else
{
while(numofpage--)
{
/* Store the number of data to be written */
dataindex = EEPROMPageSize;
status = EEPROM_SelectedDevice->WritePage(pBuffer, WriteAddr, (uint32_t*)(&dataindex));
if (status != EEPROM_OK)
{
return status;
}
WriteAddr += EEPROMPageSize;
pBuffer += EEPROMPageSize;
}
if(numofsingle!=0)
{
/* Store the number of data to be written */
dataindex = numofsingle;
status = EEPROM_SelectedDevice->WritePage(pBuffer, WriteAddr, (uint32_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_SelectedDevice->WritePage(pBuffer, WriteAddr, (uint32_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_SelectedDevice->WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint32_t*)(&dataindex));
if (status != EEPROM_OK)
{
return status;
}
}
else
{
/* Store the number of data to be written */
dataindex = numofsingle;
status = EEPROM_SelectedDevice->WritePage(pBuffer, WriteAddr, (uint32_t*)(&dataindex));
if (status != EEPROM_OK)
{
return status;
}
}
}
/*!< If NumByteToWrite > EEPROM_PAGESIZE */
else
{
NumByteToWrite -= count;
numofpage = NumByteToWrite / EEPROMPageSize;
numofsingle = NumByteToWrite % EEPROMPageSize;
if(count != 0)
{
/* Store the number of data to be written */
dataindex = count;
status = EEPROM_SelectedDevice->WritePage(pBuffer, WriteAddr, (uint32_t*)(&dataindex));
if (status != EEPROM_OK)
{
return status;
}
WriteAddr += count;
pBuffer += count;
}
while(numofpage--)
{
/* Store the number of data to be written */
dataindex = EEPROMPageSize;
status = EEPROM_SelectedDevice->WritePage(pBuffer, WriteAddr, (uint32_t*)(&dataindex));
if (status != EEPROM_OK)
{
return status;
}
WriteAddr += EEPROMPageSize;
pBuffer += EEPROMPageSize;
}
if(numofsingle != 0)
{
/* Store the number of data to be written */
dataindex = numofsingle;
status = EEPROM_SelectedDevice->WritePage(pBuffer, WriteAddr, (uint32_t*)(&dataindex));
if (status != EEPROM_OK)
{
return status;
}
}
}
}
/* If all operations OK, return EEPROM_OK (0) */
return EEPROM_OK;
}
/**
* @brief Basic management of the timeout situation.
* @retval None.
*/
__weak void BSP_EEPROM_TIMEOUT_UserCallback(void)
{
}
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_EEPROM_Private_Function_Prototypes
* @{
*/
/**
* @brief Initializes peripherals used by the I2C EEPROM driver.
* @note There are 2 different versions of M24CXX (08 or 32 or 64).
* Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01)
* and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02)
* @retval EEPROM_OK (0) if operation is correctly performed, else return value
* different from EEPROM_OK (0)
*/
static uint32_t EEPROM_I2C_Init(void)
{
EEPROM_I2C_IO_Init();
/*Select the EEPROM address for M24C32 or M24C64 and check if OK*/
EEPROMAddress = EEPROM_ADDRESS_M24C64_32;
EEPROMPageSize = EEPROM_PAGESIZE_M24C64_32;
if (EEPROM_I2C_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK)
{
EEPROMPageSize = EEPROM_PAGESIZE_M24C08;
/*Select the EEPROM address for M24C08 (BLOCK0) and check if OK*/
EEPROMAddress = EEPROM_ADDRESS_M24C08_BLOCK0;
if (EEPROM_I2C_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK)
{
/*Select the EEPROM address for M24C08 (BLOCK1) and check if OK*/
EEPROMAddress = EEPROM_ADDRESS_M24C08_BLOCK1;
if (EEPROM_I2C_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK)
{
/*Select the EEPROM address for M24C08 (BLOCK2) and check if OK*/
EEPROMAddress = EEPROM_ADDRESS_M24C08_BLOCK2;
if (EEPROM_I2C_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK)
{
/*Select the EEPROM address for M24C08 (BLOCK3) and check if OK*/
EEPROMAddress = EEPROM_ADDRESS_M24C08_BLOCK3;
if (EEPROM_I2C_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK)
{
return EEPROM_FAIL;
}
}
}
}
}
return EEPROM_OK;
}
/**
* @brief Reads a block of data from the I2C 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.
*
* @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_I2C_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint32_t* NumByteToRead)
{
uint32_t buffersize = *NumByteToRead;
if (EEPROM_I2C_IO_ReadData(EEPROMAddress, ReadAddr, pBuffer, buffersize) != HAL_OK)
{
return EEPROM_FAIL;
}
/* 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_I2C_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint32_t* NumByteToWrite)
{
uint32_t buffersize = *NumByteToWrite;
if (EEPROM_I2C_IO_WriteData(EEPROMAddress, WriteAddr, pBuffer, buffersize) != HAL_OK)
{
return EEPROM_FAIL;
}
/* Wait for EEPROM Standby state */
if (EEPROM_I2C_WaitEepromStandbyState() != EEPROM_OK)
{
return EEPROM_FAIL;
}
return EEPROM_OK;
}
/**
* @brief Wait for EEPROM I2C 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_I2C_WaitEepromStandbyState(void)
{
/* Check if the maximum allowed number of trials has bee reached */
if (EEPROM_I2C_IO_IsDeviceReady(EEPROMAddress, 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;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,130 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_eeprom.h
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file contains all the functions prototypes for
* the stm3210c_eval_eeprom.c firmware driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210C_EVAL_EEPROM_H
#define __STM3210C_EVAL_EEPROM_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm3210c_eval.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @addtogroup STM3210C_EVAL_EEPROM
* @{
*/
/** @defgroup STM3210C_EVAL_EEPROM_Exported_Types STM3210C EVAL EEPROM Exported Types
* @{
*/
typedef struct
{
uint32_t (*Init)(void);
uint32_t (*ReadBuffer)(uint8_t* , uint16_t , uint32_t* );
uint32_t (*WritePage)(uint8_t* , uint16_t , uint32_t* );
}EEPROM_DrvTypeDef;
/**
* @}
*/
/** @defgroup STM3210C_EVAL_EEPROM_Exported_Constants STM3210C EVAL EEPROM Exported Constants
* @{
*/
/* EEPROMs hardware address and page size */
#define EEPROM_ADDRESS_M24C64_32 0xA0 /* Support the devices: M24C32 and M24C64 */
/* The M24C08W contains 4 blocks (128byte each) with the addresses below: E2 = 0
EEPROM Addresses defines */
#define EEPROM_ADDRESS_M24C08_BLOCK0 0xA0
#define EEPROM_ADDRESS_M24C08_BLOCK1 0xA2
#define EEPROM_ADDRESS_M24C08_BLOCK2 0xA4
#define EEPROM_ADDRESS_M24C08_BLOCK3 0xA6
#define EEPROM_PAGESIZE_M24C64_32 32 /* Support the devices: M24C32 and M24C64 */
#define EEPROM_PAGESIZE_M24C08 16 /* Support the device: M24C08. */
/* EEPROM BSP return values */
#define EEPROM_OK 0
#define EEPROM_FAIL 1
#define EEPROM_TIMEOUT 2
/* EEPROM BSP devices definition list supported */
#define BSP_EEPROM_M24C64_32 1 /* RF I2C EEPROM M24C32 and M24C64 */
#define BSP_EEPROM_M24C08 2 /* RF I2C EEPROM M24C08 */
/* Maximum number of trials for EEPROM_I2C_WaitEepromStandbyState() function */
#define EEPROM_MAX_TRIALS 300
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_EEPROM_Exported_Functions
* @{
*/
uint32_t BSP_EEPROM_Init(void);
void BSP_EEPROM_SelectDevice(uint8_t DeviceID);
uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint32_t* NumByteToRead);
uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint32_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
occur during communication (waiting on an event that doesn't occur, bus
errors, busy devices ...). */
void BSP_EEPROM_TIMEOUT_UserCallback(void);
/* Link functions for I2C EEPROM peripheral */
void EEPROM_I2C_IO_Init(void);
HAL_StatusTypeDef EEPROM_I2C_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
HAL_StatusTypeDef EEPROM_I2C_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
HAL_StatusTypeDef EEPROM_I2C_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
#ifdef __cplusplus
}
#endif
#endif /* __STM3210C_EVAL_EEPROM_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,336 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_io.c
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file provides a set of functions needed to manage the IO pins
* on STM3210C-EVAL evaluation board.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 STM3210C-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 "stm3210c_eval_io.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @defgroup STM3210C_EVAL_IO STM3210C EVAL IO Expander
* @{
*/
/* Private variables ---------------------------------------------------------*/
/** @defgroup STM3210C_EVAL_IO_Private_Variables STM3210C EVAL IO Private Variables
* @{
*/
static IO_DrvTypeDef *io1_driver;
static IO_DrvTypeDef *io2_driver;
/**
* @}
*/
/* Private functions ---------------------------------------------------------*/
/** @defgroup STM3210C_EVAL_IO_Exported_Functions STM3210C EVAL IO Exported 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;
/* Initialize IO Expander 1*/
if(stmpe811_io_drv.ReadID(IO1_I2C_ADDRESS) == STMPE811_ID)
{
/* Initialize the IO Expander 1 driver structure */
io1_driver = &stmpe811_io_drv;
io1_driver->Init(IO1_I2C_ADDRESS);
io1_driver->Start(IO1_I2C_ADDRESS, IO1_PIN_ALL >> IO1_PIN_OFFSET);
ret = IO_OK;
}
/* Initialize IO Expander 2*/
if(stmpe811_io_drv.ReadID(IO2_I2C_ADDRESS) == STMPE811_ID)
{
/* Initialize the IO Expander 2 driver structure */
io2_driver = &stmpe811_io_drv;
io2_driver->Init(IO2_I2C_ADDRESS);
io2_driver->Start(IO2_I2C_ADDRESS, IO2_PIN_ALL >> IO2_PIN_OFFSET);
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 Status of the checked IO pin(s).
*/
uint32_t BSP_IO_ITGetStatus(uint32_t IO_Pin)
{
uint32_t status = 0;
uint32_t io1_pin = 0;
uint32_t io2_pin = 0;
io1_pin = (IO_Pin & IO1_PIN_ALL) >> IO1_PIN_OFFSET;
io2_pin = (IO_Pin & IO2_PIN_ALL) >> IO2_PIN_OFFSET;
if (io1_pin != 0)
{
/* Return the IO Expander 1 Pin IT status */
status |= (io1_driver->ITStatus(IO1_I2C_ADDRESS, io1_pin)) << IO1_PIN_OFFSET;
}
if (io2_pin != 0)
{
/* Return the IO Expander 2 Pin IT status */
status |= (io2_driver->ITStatus(IO2_I2C_ADDRESS, io2_pin)) << IO2_PIN_OFFSET;
}
return status;
}
/**
* @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(uint32_t IO_Pin)
{
uint32_t io1_pin = 0;
uint32_t io2_pin = 0;
io1_pin = (IO_Pin & IO1_PIN_ALL) >> IO1_PIN_OFFSET;
io2_pin = (IO_Pin & IO2_PIN_ALL) >> IO2_PIN_OFFSET;
if (io1_pin != 0)
{
/* Clears the selected IO Expander 1 pin(s) mode */
io1_driver->ClearIT(IO1_I2C_ADDRESS, io1_pin);
}
if (io2_pin != 0)
{
/* Clears the selected IO Expander 2 pin(s) mode */
io2_driver->ClearIT(IO2_I2C_ADDRESS, io2_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 any combination of the IO pins.
* @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(uint32_t IO_Pin, IO_ModeTypedef IO_Mode)
{
uint32_t io1_pin = 0;
uint32_t io2_pin = 0;
io1_pin = (IO_Pin & IO1_PIN_ALL) >> IO1_PIN_OFFSET;
io2_pin = (IO_Pin & IO2_PIN_ALL) >> IO2_PIN_OFFSET;
if (io1_pin != 0)
{
/* Configure the selected IO Expander 1 pin(s) mode */
io1_driver->Config(IO1_I2C_ADDRESS, io1_pin, IO_Mode);
}
if (io2_pin != 0)
{
/* Configure the selected IO Expander 2 pin(s) mode */
io2_driver->Config(IO2_I2C_ADDRESS, io2_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(uint32_t IO_Pin, uint8_t PinState)
{
uint32_t io1_pin = 0;
uint32_t io2_pin = 0;
io1_pin = (IO_Pin & IO1_PIN_ALL) >> IO1_PIN_OFFSET;
io2_pin = (IO_Pin & IO2_PIN_ALL) >> IO2_PIN_OFFSET;
if (io1_pin != 0)
{
/* Sets the IO Expander 1 selected pins state */
io1_driver->WritePin(IO1_I2C_ADDRESS, io1_pin, PinState);
}
if (io2_pin != 0)
{
/* Sets the IO Expander 2 selected pins state */
io2_driver->WritePin(IO2_I2C_ADDRESS, io2_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
*/
uint32_t BSP_IO_ReadPin(uint32_t IO_Pin)
{
uint32_t pin_state = 0;
uint32_t io1_pin = 0;
uint32_t io2_pin = 0;
io1_pin = (IO_Pin & IO1_PIN_ALL) >> IO1_PIN_OFFSET;
io2_pin = (IO_Pin & IO2_PIN_ALL) >> IO2_PIN_OFFSET;
if (io1_pin != 0)
{
/* Gets the IO Expander 1 selected pins current state */
pin_state |= (io1_driver->ReadPin(IO1_I2C_ADDRESS, io1_pin)) << IO1_PIN_OFFSET;
}
if (io2_pin != 0)
{
/* Gets the IO Expander 2 selected pins current state */
pin_state |= (io2_driver->ReadPin(IO2_I2C_ADDRESS, io2_pin)) << IO2_PIN_OFFSET;
}
return pin_state;
}
/**
* @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(uint32_t IO_Pin)
{
uint32_t io1_pin = 0;
uint32_t io2_pin = 0;
io1_pin = (IO_Pin & IO1_PIN_ALL) >> IO1_PIN_OFFSET;
io2_pin = (IO_Pin & IO2_PIN_ALL) >> IO2_PIN_OFFSET;
if (io1_pin != 0)
{
/* Toggles the IO Expander 1 selected pins state */
if(io1_driver->ReadPin(IO1_I2C_ADDRESS, io1_pin) == RESET) /* Set */
{
BSP_IO_WritePin(io1_pin, GPIO_PIN_SET); /* Reset */
}
else
{
BSP_IO_WritePin(io1_pin, GPIO_PIN_RESET); /* Set */
}
}
if (io2_pin != 0)
{
/* Toggles the IO Expander 2 selected pins state */
if(io2_driver->ReadPin(IO2_I2C_ADDRESS, io2_pin) == RESET) /* Set */
{
BSP_IO_WritePin(io2_pin, GPIO_PIN_SET); /* Reset */
}
else
{
BSP_IO_WritePin(io2_pin, GPIO_PIN_RESET); /* Set */
}
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,131 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_io.h
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* the stm3210c_eval_io.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210C_EVAL_IO_H
#define __STM3210C_EVAL_IO_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm3210c_eval.h"
#include "../Components/stmpe811/stmpe811.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @addtogroup STM3210C_EVAL_IO
* @{
*/
/* Exported types ------------------------------------------------------------*/
/** @defgroup STM3210C_EVAL_IO_Exported_Types STM3210C EVAL IO Exported Types
* @{
*/
typedef enum
{
IO_OK = 0x00,
IO_ERROR = 0x01,
IO_TIMEOUT = 0x02
}IO_StatusTypeDef;
/**
* @}
*/
/** @defgroup STM3210C_EVAL_IO_Exported_Constants STM3210C EVAL IO Exported Constants
* @{
*/
/* Virtual pin offset STMPE811, IOExpander1 */
#define IO1_PIN_OFFSET 0
/* Virtual pin offset STMPE811, IOExpander2 */
#define IO2_PIN_OFFSET 8
/* Pins definition STMPE811, IOExpander1 */
#define IO1_PIN_0 (uint32_t)(0x00000001 << IO1_PIN_OFFSET)
#define IO1_PIN_1 (uint32_t)(0x00000002 << IO1_PIN_OFFSET)
#define IO1_PIN_2 (uint32_t)(0x00000004 << IO1_PIN_OFFSET)
#define IO1_PIN_3 (uint32_t)(0x00000008 << IO1_PIN_OFFSET)
#define IO1_PIN_4 (uint32_t)(0x00000010 << IO1_PIN_OFFSET)
#define IO1_PIN_5 (uint32_t)(0x00000020 << IO1_PIN_OFFSET)
#define IO1_PIN_6 (uint32_t)(0x00000040 << IO1_PIN_OFFSET)
#define IO1_PIN_7 (uint32_t)(0x00000080 << IO1_PIN_OFFSET)
#define IO1_PIN_ALL (uint32_t)(0x000000FF << IO1_PIN_OFFSET)
/* Pins definition STMPE16000, IOExpander2 */
#define IO2_PIN_0 (uint32_t)(0x00000001 << IO2_PIN_OFFSET)
#define IO2_PIN_1 (uint32_t)(0x00000002 << IO2_PIN_OFFSET)
#define IO2_PIN_2 (uint32_t)(0x00000004 << IO2_PIN_OFFSET)
#define IO2_PIN_3 (uint32_t)(0x00000008 << IO2_PIN_OFFSET)
#define IO2_PIN_4 (uint32_t)(0x00000010 << IO2_PIN_OFFSET)
#define IO2_PIN_5 (uint32_t)(0x00000020 << IO2_PIN_OFFSET)
#define IO2_PIN_6 (uint32_t)(0x00000040 << IO2_PIN_OFFSET)
#define IO2_PIN_7 (uint32_t)(0x00000080 << IO2_PIN_OFFSET)
#define IO2_PIN_ALL (uint32_t)(0x000000FF << IO2_PIN_OFFSET)
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup STM3210C_EVAL_IO_Exported_Functions
* @{
*/
uint8_t BSP_IO_Init(void);
void BSP_IO_ITClear(uint32_t IO_Pin);
uint32_t BSP_IO_ITGetStatus(uint32_t IO_Pin);
uint8_t BSP_IO_ConfigPin(uint32_t IO_Pin, IO_ModeTypedef IO_Mode);
void BSP_IO_WritePin(uint32_t IO_Pin, uint8_t PinState);
uint32_t BSP_IO_ReadPin(uint32_t IO_Pin);
void BSP_IO_TogglePin(uint32_t IO_Pin);
#ifdef __cplusplus
}
#endif
#endif /* __STM3210C_EVAL_IO_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,913 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_lcd.c
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file includes the driver for Liquid Crystal Display (LCD) module
* mounted on STM3210C-EVAL evaluation board.
@verbatim
==============================================================================
##### How to use this driver #####
==============================================================================
[..]
(#) This driver is used to drive indirectly an LCD TFT.
(#) This driver supports the AM-240320L8TNQW00H (LCD_ILI9320) and AM240320D5TOQW01H
(LCD_ILI9325) LCD mounted on MB785 daughter board
(#) The ILI9320 and ILI9325 components driver MUST be included with this driver.
(#) Initialization steps:
(++) Initialize the LCD using the BSP_LCD_Init() function.
(#) Display on LCD
(++) Clear the hole LCD using the BSP_LCD_Clear() function or only one specified
string line using the BSP_LCD_ClearStringLine() function.
(++) Display a character on the specified line and column using the BSP_LCD_DisplayChar()
function or a complete string line using the BSP_LCD_DisplayStringAtLine() function.
(++) Display a string line on the specified position (x,y in pixel) and align mode
using the BSP_LCD_DisplayStringAtLine() function.
(++) Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap, raw picture)
on LCD using a set of functions.
@endverbatim
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 "stm3210c_eval_lcd.h"
#include "../../../Utilities/Fonts/fonts.h"
#include "../../../Utilities/Fonts/font24.c"
#include "../../../Utilities/Fonts/font20.c"
#include "../../../Utilities/Fonts/font16.c"
#include "../../../Utilities/Fonts/font12.c"
#include "../../../Utilities/Fonts/font8.c"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @defgroup STM3210C_EVAL_LCD STM3210C EVAL LCD
* @{
*/
/** @defgroup STM3210C_EVAL_LCD_Private_Defines STM3210C EVAL LCD Private Defines
* @{
*/
#define POLY_X(Z) ((int32_t)((Points + (Z))->X))
#define POLY_Y(Z) ((int32_t)((Points + (Z))->Y))
#define MAX_HEIGHT_FONT 17
#define MAX_WIDTH_FONT 24
#define OFFSET_BITMAP 54
/**
* @}
*/
/** @defgroup STM3210C_EVAL_LCD_Private_Macros STM3210C EVAL LCD Private Macros
* @{
*/
#define ABS(X) ((X) > 0 ? (X) : -(X))
/**
* @}
*/
/** @defgroup STM3210C_EVAL_LCD_Private_Variables STM3210C EVAL LCD Private Variables
* @{
*/
LCD_DrawPropTypeDef DrawProp;
static LCD_DrvTypeDef *lcd_drv;
/* Max size of bitmap will based on a font24 (17x24) */
static uint8_t bitmap[MAX_HEIGHT_FONT*MAX_WIDTH_FONT*2+OFFSET_BITMAP] = {0};
/**
* @}
*/
/** @defgroup STM3210C_EVAL_LCD_Private_Functions STM3210C EVAL LCD Private Functions
* @{
*/
static void LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode);
static void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c);
static void LCD_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
/**
* @}
*/
/** @defgroup STM3210C_EVAL_LCD_Exported_Functions STM3210C EVAL LCD Exported Functions
* @{
*/
/**
* @brief Initializes the LCD.
* @retval LCD state
*/
uint8_t BSP_LCD_Init(void)
{
uint8_t ret = LCD_ERROR;
/* Default value for draw propriety */
DrawProp.BackColor = 0xFFFF;
DrawProp.pFont = &Font24;
DrawProp.TextColor = 0x0000;
if(ili9320_drv.ReadID() == ILI9320_ID)
{
lcd_drv = &ili9320_drv;
/* LCD Init */
lcd_drv->Init();
/* Initialize the font */
BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
ret = LCD_OK;
}
else if(ili9325_drv.ReadID() == ILI9325_ID)
{
lcd_drv = &ili9325_drv;
/* LCD Init */
lcd_drv->Init();
/* Initialize the font */
BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
ret = LCD_OK;
}
return ret;
}
/**
* @brief Gets the LCD X size.
* @retval Used LCD X size
*/
uint32_t BSP_LCD_GetXSize(void)
{
return(lcd_drv->GetLcdPixelWidth());
}
/**
* @brief Gets the LCD Y size.
* @retval Used LCD Y size
*/
uint32_t BSP_LCD_GetYSize(void)
{
return(lcd_drv->GetLcdPixelHeight());
}
/**
* @brief Gets the LCD text color.
* @retval Used text color.
*/
uint16_t BSP_LCD_GetTextColor(void)
{
return DrawProp.TextColor;
}
/**
* @brief Gets the LCD background color.
* @retval Used background color
*/
uint16_t BSP_LCD_GetBackColor(void)
{
return DrawProp.BackColor;
}
/**
* @brief Sets the LCD text color.
* @param Color: Text color code RGB(5-6-5)
*/
void BSP_LCD_SetTextColor(uint16_t Color)
{
DrawProp.TextColor = Color;
}
/**
* @brief Sets the LCD background color.
* @param Color: Background color code RGB(5-6-5)
*/
void BSP_LCD_SetBackColor(uint16_t Color)
{
DrawProp.BackColor = Color;
}
/**
* @brief Sets the LCD text font.
* @param pFonts: Font to be used
*/
void BSP_LCD_SetFont(sFONT *pFonts)
{
DrawProp.pFont = pFonts;
}
/**
* @brief Gets the LCD text font.
* @retval Used font
*/
sFONT *BSP_LCD_GetFont(void)
{
return DrawProp.pFont;
}
/**
* @brief Clears the hole LCD.
* @param Color: Color of the background
*/
void BSP_LCD_Clear(uint16_t Color)
{
uint32_t counter = 0;
uint32_t color_backup = DrawProp.TextColor;
DrawProp.TextColor = Color;
for(counter = 0; counter < BSP_LCD_GetYSize(); counter++)
{
BSP_LCD_DrawHLine(0, counter, BSP_LCD_GetXSize());
}
DrawProp.TextColor = color_backup;
BSP_LCD_SetTextColor(DrawProp.TextColor);
}
/**
* @brief Clears the selected line.
* @param Line: Line to be cleared
* This parameter can be one of the following values:
* @arg 0..9: if the Current fonts is Font16x24
* @arg 0..19: if the Current fonts is Font12x12 or Font8x12
* @arg 0..29: if the Current fonts is Font8x8
*/
void BSP_LCD_ClearStringLine(uint16_t Line)
{
uint32_t colorbackup = DrawProp.TextColor;
DrawProp.TextColor = DrawProp.BackColor;;
/* Draw a rectangle with background color */
BSP_LCD_FillRect(0, (Line * DrawProp.pFont->Height), BSP_LCD_GetXSize(), DrawProp.pFont->Height);
DrawProp.TextColor = colorbackup;
BSP_LCD_SetTextColor(DrawProp.TextColor);
}
/**
* @brief Displays one character.
* @param Xpos: Start column address
* @param Ypos: Line where to display the character shape.
* @param Ascii: Character ascii code
* This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E
*/
void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii)
{
LCD_DrawChar(Xpos, Ypos, &DrawProp.pFont->table[(Ascii-' ') *\
DrawProp.pFont->Height * ((DrawProp.pFont->Width + 7) / 8)]);
}
/**
* @brief Displays characters on the LCD.
* @param Xpos: X position (in pixel)
* @param Ypos: Y position (in pixel)
* @param pText: Pointer to string to display on LCD
* @param Mode: Display mode
* This parameter can be one of the following values:
* @arg CENTER_MODE
* @arg RIGHT_MODE
* @arg LEFT_MODE
*/
void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *pText, Line_ModeTypdef Mode)
{
uint16_t refcolumn = 1, counter = 0;
uint32_t size = 0, xsize = 0;
uint8_t *ptr = pText;
/* Get the text size */
while (*ptr++) size ++ ;
/* Characters number per line */
xsize = (BSP_LCD_GetXSize()/DrawProp.pFont->Width);
switch (Mode)
{
case CENTER_MODE:
{
refcolumn = Xpos + ((xsize - size)* DrawProp.pFont->Width) / 2;
break;
}
case LEFT_MODE:
{
refcolumn = Xpos;
break;
}
case RIGHT_MODE:
{
refcolumn = - Xpos + ((xsize - size)*DrawProp.pFont->Width);
break;
}
default:
{
refcolumn = Xpos;
break;
}
}
/* Send the string character by character on lCD */
while ((*pText != 0) & (((BSP_LCD_GetXSize() - (counter*DrawProp.pFont->Width)) & 0xFFFF) >= DrawProp.pFont->Width))
{
/* Display one character on LCD */
BSP_LCD_DisplayChar(refcolumn, Ypos, *pText);
/* Decrement the column position by 16 */
refcolumn += DrawProp.pFont->Width;
/* Point on the next character */
pText++;
counter++;
}
}
/**
* @brief Displays a character on the LCD.
* @param Line: Line where to display the character shape
* This parameter can be one of the following values:
* @arg 0..9: if the Current fonts is Font16x24
* @arg 0..19: if the Current fonts is Font12x12 or Font8x12
* @arg 0..29: if the Current fonts is Font8x8
* @param pText: Pointer to string to display on LCD
*/
void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *pText)
{
BSP_LCD_DisplayStringAt(0, LINE(Line),pText, LEFT_MODE);
}
/**
* @brief Reads an LCD pixel.
* @param Xpos: X position
* @param Ypos: Y position
* @retval RGB pixel color
*/
uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos)
{
uint16_t ret = 0;
if(lcd_drv->ReadPixel != NULL)
{
ret = lcd_drv->ReadPixel(Xpos, Ypos);
}
return ret;
}
/**
* @brief Draws an horizontal line.
* @param Xpos: X position
* @param Ypos: Y position
* @param Length: Line length
*/
void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
{
uint32_t index = 0;
if(lcd_drv->DrawHLine != NULL)
{
lcd_drv->DrawHLine(DrawProp.TextColor, Xpos, Ypos, Length);
}
else
{
for(index = 0; index < Length; index++)
{
LCD_DrawPixel((Xpos + index), Ypos, DrawProp.TextColor);
}
}
}
/**
* @brief Draws a vertical line.
* @param Xpos: X position
* @param Ypos: Y position
* @param Length: Line length
*/
void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
{
uint32_t index = 0;
if(lcd_drv->DrawVLine != NULL)
{
lcd_drv->DrawVLine(DrawProp.TextColor, Xpos, Ypos, Length);
}
else
{
for(index = 0; index < Length; index++)
{
LCD_DrawPixel(Xpos, Ypos + index, DrawProp.TextColor);
}
}
}
/**
* @brief Draws an uni-line (between two points).
* @param x1: Point 1 X position
* @param y1: Point 1 Y position
* @param x2: Point 2 X position
* @param y2: Point 2 Y position
*/
void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
{
int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
curpixel = 0;
deltax = ABS(x2 - x1); /* The difference between the x's */
deltay = ABS(y2 - y1); /* The difference between the y's */
x = x1; /* Start x off at the first pixel */
y = y1; /* Start y off at the first pixel */
if (x2 >= x1) /* The x-values are increasing */
{
xinc1 = 1;
xinc2 = 1;
}
else /* The x-values are decreasing */
{
xinc1 = -1;
xinc2 = -1;
}
if (y2 >= y1) /* The y-values are increasing */
{
yinc1 = 1;
yinc2 = 1;
}
else /* The y-values are decreasing */
{
yinc1 = -1;
yinc2 = -1;
}
if (deltax >= deltay) /* There is at least one x-value for every y-value */
{
xinc1 = 0; /* Don't change the x when numerator >= denominator */
yinc2 = 0; /* Don't change the y for every iteration */
den = deltax;
num = deltax / 2;
numadd = deltay;
numpixels = deltax; /* There are more x-values than y-values */
}
else /* There is at least one y-value for every x-value */
{
xinc2 = 0; /* Don't change the x for every iteration */
yinc1 = 0; /* Don't change the y when numerator >= denominator */
den = deltay;
num = deltay / 2;
numadd = deltax;
numpixels = deltay; /* There are more y-values than x-values */
}
for (curpixel = 0; curpixel <= numpixels; curpixel++)
{
LCD_DrawPixel(x, y, DrawProp.TextColor); /* Draw the current pixel */
num += numadd; /* Increase the numerator by the top of the fraction */
if (num >= den) /* Check if numerator >= denominator */
{
num -= den; /* Calculate the new numerator value */
x += xinc1; /* Change the x as appropriate */
y += yinc1; /* Change the y as appropriate */
}
x += xinc2; /* Change the x as appropriate */
y += yinc2; /* Change the y as appropriate */
}
}
/**
* @brief Draws a rectangle.
* @param Xpos: X position
* @param Ypos: Y position
* @param Width: Rectangle width
* @param Height: Rectangle height
*/
void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
{
/* Draw horizontal lines */
BSP_LCD_DrawHLine(Xpos, Ypos, Width);
BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width);
/* Draw vertical lines */
BSP_LCD_DrawVLine(Xpos, Ypos, Height);
BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height);
}
/**
* @brief Draws a circle.
* @param Xpos: X position
* @param Ypos: Y position
* @param Radius: Circle radius
*/
void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
{
int32_t D; /* Decision Variable */
uint32_t CurX; /* Current X Value */
uint32_t CurY; /* Current Y Value */
D = 3 - (Radius << 1);
CurX = 0;
CurY = Radius;
while (CurX <= CurY)
{
LCD_DrawPixel((Xpos + CurX), (Ypos - CurY), DrawProp.TextColor);
LCD_DrawPixel((Xpos - CurX), (Ypos - CurY), DrawProp.TextColor);
LCD_DrawPixel((Xpos + CurY), (Ypos - CurX), DrawProp.TextColor);
LCD_DrawPixel((Xpos - CurY), (Ypos - CurX), DrawProp.TextColor);
LCD_DrawPixel((Xpos + CurX), (Ypos + CurY), DrawProp.TextColor);
LCD_DrawPixel((Xpos - CurX), (Ypos + CurY), DrawProp.TextColor);
LCD_DrawPixel((Xpos + CurY), (Ypos + CurX), DrawProp.TextColor);
LCD_DrawPixel((Xpos - CurY), (Ypos + CurX), DrawProp.TextColor);
/* Initialize the font */
BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
if (D < 0)
{
D += (CurX << 2) + 6;
}
else
{
D += ((CurX - CurY) << 2) + 10;
CurY--;
}
CurX++;
}
}
/**
* @brief Draws an poly-line (between many points).
* @param Points: Pointer to the points array
* @param PointCount: Number of points
*/
void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount)
{
int16_t X = 0, Y = 0;
if(PointCount < 2)
{
return;
}
BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
while(--PointCount)
{
X = Points->X;
Y = Points->Y;
Points++;
BSP_LCD_DrawLine(X, Y, Points->X, Points->Y);
}
}
/**
* @brief Draws an ellipse on LCD.
* @param Xpos: X position
* @param Ypos: Y position
* @param XRadius: Ellipse X radius
* @param YRadius: Ellipse Y radius
*/
void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
{
int x = 0, y = -YRadius, err = 2-2*XRadius, e2;
float K = 0, rad1 = 0, rad2 = 0;
rad1 = XRadius;
rad2 = YRadius;
K = (float)(rad2/rad1);
do {
LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos+y), DrawProp.TextColor);
LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos+y), DrawProp.TextColor);
LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos-y), DrawProp.TextColor);
LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos-y), DrawProp.TextColor);
e2 = err;
if (e2 <= x) {
err += ++x*2+1;
if (-y == x && e2 <= y) e2 = 0;
}
if (e2 > y) err += ++y*2+1;
}
while (y <= 0);
}
/**
* @brief Draws a bitmap picture (16 bpp).
* @param Xpos: Bmp X position in the LCD
* @param Ypos: Bmp Y position in the LCD
* @param pbmp: Pointer to Bmp picture address.
*/
void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp)
{
uint32_t height = 0;
uint32_t width = 0;
/* Read bitmap width */
width = *(uint16_t *) (pbmp + 18);
width |= (*(uint16_t *) (pbmp + 20)) << 16;
/* Read bitmap height */
height = *(uint16_t *) (pbmp + 22);
height |= (*(uint16_t *) (pbmp + 24)) << 16;
LCD_SetDisplayWindow(Xpos, Ypos, width, height);
if(lcd_drv->DrawBitmap != NULL)
{
lcd_drv->DrawBitmap(Xpos, Ypos, pbmp);
}
LCD_SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
}
/**
* @brief Draws RGB Image (16 bpp).
* @param Xpos: X position in the LCD
* @param Ypos: Y position in the LCD
* @param Xsize: X size in the LCD
* @param Ysize: Y size in the LCD
* @param pdata: Pointer to the RGB Image address.
*/
void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata)
{
LCD_SetDisplayWindow(Xpos, Ypos, Xsize, Ysize);
if(lcd_drv->DrawRGBImage != NULL)
{
lcd_drv->DrawRGBImage(Xpos, Ypos, Xsize, Ysize, pdata);
}
LCD_SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
}
/**
* @brief Draws a full rectangle.
* @param Xpos: X position
* @param Ypos: Y position
* @param Width: Rectangle width
* @param Height: Rectangle height
*/
void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
{
BSP_LCD_SetTextColor(DrawProp.TextColor);
do
{
BSP_LCD_DrawHLine(Xpos, Ypos++, Width);
}
while(Height--);
}
/**
* @brief Draws a full circle.
* @param Xpos: X position
* @param Ypos: Y position
* @param Radius: Circle radius
*/
void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
{
int32_t D; /* Decision Variable */
uint32_t CurX; /* Current X Value */
uint32_t CurY; /* Current Y Value */
D = 3 - (Radius << 1);
CurX = 0;
CurY = Radius;
BSP_LCD_SetTextColor(DrawProp.TextColor);
while (CurX <= CurY)
{
if(CurY > 0)
{
BSP_LCD_DrawHLine(Xpos - CurY, Ypos + CurX, 2*CurY);
BSP_LCD_DrawHLine(Xpos - CurY, Ypos - CurX, 2*CurY);
}
if(CurX > 0)
{
BSP_LCD_DrawHLine(Xpos - CurX, Ypos - CurY, 2*CurX);
BSP_LCD_DrawHLine(Xpos - CurX, Ypos + CurY, 2*CurX);
}
if (D < 0)
{
D += (CurX << 2) + 6;
}
else
{
D += ((CurX - CurY) << 2) + 10;
CurY--;
}
CurX++;
}
BSP_LCD_SetTextColor(DrawProp.TextColor);
BSP_LCD_DrawCircle(Xpos, Ypos, Radius);
}
/**
* @brief Draws a full ellipse.
* @param Xpos: X position
* @param Ypos: Y position
* @param XRadius: Ellipse X radius
* @param YRadius: Ellipse Y radius
*/
void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
{
int x = 0, y = -YRadius, err = 2-2*XRadius, e2;
float K = 0, rad1 = 0, rad2 = 0;
rad1 = XRadius;
rad2 = YRadius;
K = (float)(rad2/rad1);
do
{
BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos+y), (2*(uint16_t)(x/K) + 1));
BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos-y), (2*(uint16_t)(x/K) + 1));
e2 = err;
if (e2 <= x)
{
err += ++x*2+1;
if (-y == x && e2 <= y) e2 = 0;
}
if (e2 > y) err += ++y*2+1;
}
while (y <= 0);
}
/**
* @brief Enables the display.
*/
void BSP_LCD_DisplayOn(void)
{
lcd_drv->DisplayOn();
}
/**
* @brief Disables the display.
*/
void BSP_LCD_DisplayOff(void)
{
lcd_drv->DisplayOff();
}
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_LCD_Private_Functions
* @{
*/
/******************************************************************************
Static Function
*******************************************************************************/
/**
* @brief Draws a pixel on LCD.
* @param Xpos: X position
* @param Ypos: Y position
* @param RGBCode: Pixel color in RGB mode (5-6-5)
*/
static void LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode)
{
if(lcd_drv->WritePixel != NULL)
{
lcd_drv->WritePixel(Xpos, Ypos, RGBCode);
}
}
/**
* @brief Draws a character on LCD.
* @param Xpos: Line where to display the character shape
* @param Ypos: Start column address
* @param pChar: Pointer to the character data
*/
static void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *pChar)
{
uint32_t counterh = 0, counterw = 0, index = 0;
uint16_t height = 0, width = 0;
uint8_t offset = 0;
uint8_t *pchar = NULL;
uint32_t line = 0;
height = DrawProp.pFont->Height;
width = DrawProp.pFont->Width;
/* Fill bitmap header*/
*(uint16_t *) (bitmap + 2) = (uint16_t)(height*width*2+OFFSET_BITMAP);
*(uint16_t *) (bitmap + 4) = (uint16_t)((height*width*2+OFFSET_BITMAP)>>16);
*(uint16_t *) (bitmap + 10) = OFFSET_BITMAP;
*(uint16_t *) (bitmap + 18) = (uint16_t)(width);
*(uint16_t *) (bitmap + 20) = (uint16_t)((width)>>16);
*(uint16_t *) (bitmap + 22) = (uint16_t)(height);
*(uint16_t *) (bitmap + 24) = (uint16_t)((height)>>16);
offset = 8 *((width + 7)/8) - width ;
for(counterh = 0; counterh < height; counterh++)
{
pchar = ((uint8_t *)pChar + (width + 7)/8 * counterh);
if(((width + 7)/8) == 3)
{
line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2];
}
if(((width + 7)/8) == 2)
{
line = (pchar[0]<< 8) | pchar[1];
}
if(((width + 7)/8) == 1)
{
line = pchar[0];
}
for (counterw = 0; counterw < width; counterw++)
{
/* Image in the bitmap is written from the bottom to the top */
/* Need to invert image in the bitmap */
index = (((height-counterh-1)*width)+(counterw))*2+OFFSET_BITMAP;
if(line & (1 << (width- counterw + offset- 1)))
{
bitmap[index] = (uint8_t)DrawProp.TextColor;
bitmap[index+1] = (uint8_t)(DrawProp.TextColor >> 8);
}
else
{
bitmap[index] = (uint8_t)DrawProp.BackColor;
bitmap[index+1] = (uint8_t)(DrawProp.BackColor >> 8);
}
}
}
BSP_LCD_DrawBitmap(Xpos, Ypos, bitmap);
}
/**
* @brief Sets display window.
* @param Xpos: LCD X position
* @param Ypos: LCD Y position
* @param Width: LCD window width
* @param Height: LCD window height
*/
static void LCD_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
{
if(lcd_drv->SetDisplayWindow != NULL)
{
lcd_drv->SetDisplayWindow(Xpos, Ypos, Width, Height);
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,185 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_lcd.h
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* the stm3210c_eval_lcd.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210C_EVAL_LCD_H
#define __STM3210C_EVAL_LCD_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm3210c_eval.h"
#include "../Components/ili9325/ili9325.h"
#include "../Components/ili9320/ili9320.h"
#include "../../../Utilities/Fonts/fonts.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @addtogroup STM3210C_EVAL_LCD
* @{
*/
/** @defgroup STM3210C_EVAL_LCD_Exported_Types STM3210C EVAL LCD Exported Types
* @{
*/
typedef struct
{
uint32_t TextColor;
uint32_t BackColor;
sFONT *pFont;
}LCD_DrawPropTypeDef;
/**
* @}
*/
/** @defgroup STM3210C_EVAL_LCD_Exported_Constants STM3210C 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
/**
* @}
*/
/** @addtogroup STM3210C_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_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_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
void BSP_LCD_DisplayOff(void);
void BSP_LCD_DisplayOn(void);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210C_EVAL_LCD_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

File diff suppressed because it is too large Load Diff

View File

@ -1,227 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_sd.h
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* the stm3210c_eval_sd.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210C_EVAL_SD_H
#define __STM3210C_EVAL_SD_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm3210c_eval.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @addtogroup STM3210C_EVAL_SD
* @{
*/
/** @defgroup STM3210C_EVAL_SD_Exported_Types STM3210C EVAL SD Exported Types
* @{
*/
/**
* @brief SD status structure definition
*/
enum {
BSP_SD_OK = 0x00,
MSD_OK = 0x00,
BSP_SD_ERROR = 0x01,
BSP_SD_TIMEOUT
};
typedef struct
{
uint8_t Reserved1:2; /* Reserved */
uint16_t DeviceSize:12; /* Device Size */
uint8_t MaxRdCurrentVDDMin:3; /* Max. read current @ VDD min */
uint8_t MaxRdCurrentVDDMax:3; /* Max. read current @ VDD max */
uint8_t MaxWrCurrentVDDMin:3; /* Max. write current @ VDD min */
uint8_t MaxWrCurrentVDDMax:3; /* Max. write current @ VDD max */
uint8_t DeviceSizeMul:3; /* Device size multiplier */
} struct_v1;
typedef struct
{
uint8_t Reserved1:6; /* Reserved */
uint32_t DeviceSize:22; /* Device Size */
uint8_t Reserved2:1; /* Reserved */
} struct_v2;
/**
* @brief Card Specific Data: CSD Register
*/
typedef struct
{
/* Header part */
uint8_t CSDStruct:2; /* CSD structure */
uint8_t Reserved1:6; /* Reserved */
uint8_t TAAC:8; /* Data read access-time 1 */
uint8_t NSAC:8; /* Data read access-time 2 in CLK cycles */
uint8_t MaxBusClkFrec:8; /* Max. bus clock frequency */
uint16_t CardComdClasses:12; /* Card command classes */
uint8_t RdBlockLen:4; /* Max. read data block length */
uint8_t PartBlockRead:1; /* Partial blocks for read allowed */
uint8_t WrBlockMisalign:1; /* Write block misalignment */
uint8_t RdBlockMisalign:1; /* Read block misalignment */
uint8_t DSRImpl:1; /* DSR implemented */
/* v1 or v2 struct */
union csd_version {
struct_v1 v1;
struct_v2 v2;
} version;
uint8_t EraseSingleBlockEnable:1; /* Erase single block enable */
uint8_t EraseSectorSize:7; /* Erase group size multiplier */
uint8_t WrProtectGrSize:7; /* Write protect group size */
uint8_t WrProtectGrEnable:1; /* Write protect group enable */
uint8_t Reserved2:2; /* Reserved */
uint8_t WrSpeedFact:3; /* Write speed factor */
uint8_t MaxWrBlockLen:4; /* Max. write data block length */
uint8_t WriteBlockPartial:1; /* Partial blocks for write allowed */
uint8_t Reserved3:5; /* Reserved */
uint8_t FileFormatGrouop:1; /* File format group */
uint8_t CopyFlag:1; /* Copy flag (OTP) */
uint8_t PermWrProtect:1; /* Permanent write protection */
uint8_t TempWrProtect:1; /* Temporary write protection */
uint8_t FileFormat:2; /* File Format */
uint8_t Reserved4:2; /* Reserved */
uint8_t crc:7; /* Reserved */
uint8_t Reserved5:1; /* always 1*/
} SD_CSD;
/**
* @brief Card Identification Data: CID Register
*/
typedef struct
{
__IO uint8_t ManufacturerID; /* ManufacturerID */
__IO uint16_t OEM_AppliID; /* OEM/Application ID */
__IO uint32_t ProdName1; /* Product Name part1 */
__IO uint8_t ProdName2; /* Product Name part2*/
__IO uint8_t ProdRev; /* Product Revision */
__IO uint32_t ProdSN; /* Product Serial Number */
__IO uint8_t Reserved1; /* Reserved1 */
__IO uint16_t ManufactDate; /* Manufacturing Date */
__IO uint8_t CID_CRC; /* CID CRC */
__IO uint8_t Reserved2; /* always 1 */
} SD_CID;
/**
* @brief SD Card information
*/
typedef struct
{
SD_CSD Csd;
SD_CID Cid;
uint32_t CardCapacity; /*!< Card Capacity */
uint32_t CardBlockSize; /*!< Card Block Size */
uint32_t LogBlockNbr; /*!< Specifies the Card logical Capacity in blocks */
uint32_t LogBlockSize; /*!< Specifies logical block size in bytes */
} SD_CardInfo;
/**
* @}
*/
/** @defgroup STM3210C_EVAL_SPI_SD_Exported_Constants STM3210C EVAL SPI SD Exported Constants
* @{
*/
/**
* @brief SD detection on its memory slot
*/
#define SD_PRESENT ((uint8_t)0x01)
#define SD_NOT_PRESENT ((uint8_t)0x00)
#define SD_DATATIMEOUT 100000000U
/**
* @brief SD Card information structure
*/
#define BSP_SD_CardInfo SD_CardInfo
/**
* @brief SD transfer state definition
*/
#define SD_TRANSFER_OK ((uint8_t)0x00)
#define SD_TRANSFER_BUSY ((uint8_t)0x01)
/**
* @}
*/
/** @addtogroup STM3210C_EVAL_SD_Exported_Functions
* @{
*/
uint8_t BSP_SD_Init(void);
uint8_t BSP_SD_IsDetected(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_Erase(uint32_t StartAddr, uint32_t EndAddr);
uint8_t BSP_SD_GetCardState(void);
uint8_t BSP_SD_GetCardInfo(SD_CardInfo *pCardInfo);
/* Link functions for SD Card peripheral*/
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);
void SD_IO_WriteData(const uint8_t *Data, uint16_t DataLength);
void SD_IO_ReadData(const uint8_t *Data, uint16_t DataLength);
uint8_t SD_IO_WriteByte(uint8_t Data);
/* Link function for HAL delay */
void HAL_Delay(__IO uint32_t Delay);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210C_EVAL_SD_H */

View File

@ -1,218 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_ts.c
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file provides a set of functions needed to manage the touch
* screen on STM3210C_EVAL evaluation board.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 STM3210C-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 "stm3210c_eval_ts.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @defgroup STM3210C_EVAL_TS STM3210C EVAL Touch Screen
* @{
*/
/* Private variables ---------------------------------------------------------*/
/** @defgroup STM3210C_EVAL_TS_Private_Variables STM3210C EVAL TS Private Variables
* @{
*/
static TS_DrvTypeDef *ts_driver;
static uint16_t ts_x_boundary, ts_y_boundary;
static uint8_t ts_orientation;
/**
* @}
*/
/* Private functions ---------------------------------------------------------*/
/** @defgroup STM3210C_EVAL_TS_Exported_Functions STM3210C EVAL TS Exported 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->Reset(TS_I2C_ADDRESS);
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,119 +0,0 @@
/**
******************************************************************************
* @file stm3210c_eval_ts.h
* @author MCD Application Team
* @version V6.1.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* the stm3210c_eval_ts.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210C_EVAL_TS_H
#define __STM3210C_EVAL_TS_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm3210c_eval.h"
#include "../Components/stmpe811/stmpe811.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210C_EVAL
* @{
*/
/** @addtogroup STM3210C_EVAL_TS
* @{
*/
/* Exported types ------------------------------------------------------------*/
/** @defgroup STM3210C_EVAL_TS_Exported_Types STM3210C EVAL TS Exported Types
* @{
*/
typedef struct
{
uint16_t TouchDetected;
uint16_t x;
uint16_t y;
uint16_t z;
}TS_StateTypeDef;
/**
* @}
*/
/* Exported constants --------------------------------------------------------*/
/** @defgroup STM3210C_EVAL_TS_Exported_Constants STM3210C 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;
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup STM3210C_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 /* __STM3210C_EVAL_TS_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

@ -0,0 +1 @@
Subproject commit 6b36c9912e39594ef9fba24d1e218b8dc3e62a2d

View File

@ -1,27 +0,0 @@
Copyright 2014 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 STM3210E-EVAL Component
![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm3210e-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 **stm3210e-eval** MCU component repository is one element of the **STM32CubeF1** MCU embedded software package, providing the **STM3210E-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/stm3210e-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/STM32CubeF1/blob/master/Release_Notes.html) release note.
* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common)
* [stm32-ak4343](https://github.com/STMicroelectronics/stm32-ak4343)
* [stm32-hx8347d](https://github.com/STMicroelectronics/stm32-hx8347d)
* [stm32-ili9320](https://github.com/STMicroelectronics/stm32-ili9320)
* [stm32-spfd5408](https://github.com/STMicroelectronics/stm32-spfd5408)
* [stm32-stlm75](https://github.com/STMicroelectronics/stm32-stlm75)
## Troubleshooting
Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide.

View File

@ -1,392 +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 STM3210E_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-stm3210e_eval-evaluation-board-drivers"><small>Release Notes for</small> <mark>STM3210E_EVAL Evaluation Board Drivers</mark></h1>
<p>Copyright © 2014 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 STM3210E 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-section17" checked aria-hidden="true"> <label for="collapse-section17" 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>
<li>Update to initialize LCD page size.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section16" aria-hidden="true"> <label for="collapse-section16" aria-hidden="true">V7.0.1 / 18-May-2021</label>
<div>
<h2 id="main-changes-1">Main Changes</h2>
<ul>
<li>Add a License.md file at the root of the BSP Board driver.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section15" aria-hidden="true"> <label for="collapse-section15" aria-hidden="true">V7.0.0 / 14-April-2017</label>
<div>
<h2 id="main-changes-2">Main Changes</h2>
<ul>
<li>Add STM3210E_EVAL_BSP_User_Manual.chm file</li>
<li>stm3210e_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>stm3210e_eval_audio.c/.h:
<ul>
<li>Add BSP_AUDIO_OUT_MspInit() and BSP_AUDIO_OUT_MspDeInit() as weak APIs to manage audio hardware resources initialization/de-initialization.</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 20170214” must be used with this version of BSP drivers.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section14" aria-hidden="true"> <label for="collapse-section14" aria-hidden="true">V6.0.2 / 29-April-2016</label>
<div>
<h2 id="main-changes-3">Main Changes</h2>
<ul>
<li>Add AUDIO_IO_DeInit for compatibility with common V4.0.1.</li>
<li>Set the NVIC priority to the lowest possible to not interfere with user settings.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section13" aria-hidden="true"> <label for="collapse-section13" aria-hidden="true">V6.0.1 / 18-December-2015</label>
<div>
<h2 id="main-changes-4">Main Changes</h2>
<ul>
<li>Rename GPIO_SPEED_HIGH to GPIO_SPEED_FREQ_HIGH for compatibility with STM32F1xx HAL Drivers V1.0.2.</li>
<li>Rename GPIO_SPEED_MEDIUM to GPIO_SPEED_FREQ_MEDIUM for compatibility with STM32F1xx HAL Drivers V1.0.2.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section12" aria-hidden="true"> <label for="collapse-section12" aria-hidden="true">V6.0.0 / 16-December-2014</label>
<div>
<h2 id="main-changes-5">Main Changes</h2>
<ul>
<li>Major update based on STM32Cube specification: drivers architecture and APIs modified vs. V5.1.0 and thus the 2 versions are not compatible.</li>
<li>This version has to be used only with STM32CubeF1 based development.</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section11" aria-hidden="true"> <label for="collapse-section11" aria-hidden="true">V5.1.0 / 08-January-2013</label>
<div>
<h2 id="main-changes-6">Main Changes</h2>
<ul>
<li>stm3210e_eval_lcd.c: update to support new LCD AM240320LGTNQW00H (controller HX8347-D).</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 / 05-March-2012</label>
<div>
<h2 id="main-changes-7">Main Changes</h2>
<ul>
<li>All source files: license disclaimer text update and add link to the License file on ST Internet.</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 / 03-February-2012</label>
<div>
<h2 id="main-changes-8">Main Changes</h2>
<ul>
<li>All source files: update disclaimer to add reference to the new license agreement</li>
<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 “stm3210e_eval.c” instead of “stm32_eval.c”</li>
<li>Include your EVAL board driver header file #include “stm3210e_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 “stm3210e_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>
</ul></li>
<li>stm3210e_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>stm3210e_eval.h/.c
<ul>
<li>change value of “SDIO_TRANSFER_CLK_DIV” define from 0 to 1 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>Update SD_LowLevel_DMA_TxConfig() and SD_LowLevel_DMA_RxConfig() functions to enable the DMA transfer complete IT</li>
</ul></li>
<li>stm3210e_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>Update to support SDHC memory cards with capacity greater than 4 GB
<ul>
<li>SD_CardInfo structure, define CardCapacity variable as 64-bit long (instead of 32-bit)</li>
<li>Declare ReadAddr and WriteAddr parameters in SD_ReadBlock(),SD_WriteBlock(), SD_ReadMultiBlocks() and SD_WriteMultiBlocks() as 64-bit long (instead of 32-bit)</li>
</ul></li>
<li>Refer to the driver header files comments for more information on how to use the provided API.</li>
</ul></li>
<li>stm3210e_eval_fsmc_nor.c
<ul>
<li>NOR_ProgramBuffer() function: remove this comment “This function must be used only with S29GL128P NOR memory.”</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-9">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-10">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-Mars-2011</label>
<div>
<h2 id="main-changes-11">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-Mars-2011</label>
<div>
<h2 id="main-changes-12">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-13">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-Octobre-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,524 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval.h
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file contains definitions for STM3210E_EVAL's LEDs,
* push-buttons and COM ports hardware resources.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210E_EVAL_H
#define __STM3210E_EVAL_H
#ifdef __cplusplus
extern "C" {
#endif
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
/** @addtogroup STM3210E_EVAL_Common
* @{
*/
/** @defgroup STM3210E_EVAL_Exported_Types STM3210E EVAL Exported Types
* @{
*/
/**
* @brief LED Types Definition
*/
typedef enum
{
LED1 = 0,
LED2 = 1,
LED3 = 2,
LED4 = 3,
LED_GREEN = LED1,
LED_ORANGE = LED2,
LED_RED = LED3,
LED_BLUE = LED4
} Led_TypeDef;
/**
* @brief BUTTON Types Definition
*/
typedef enum
{
BUTTON_WAKEUP = 0,
BUTTON_TAMPER = 1,
BUTTON_KEY = 2,
BUTTON_SEL = 3,
BUTTON_LEFT = 4,
BUTTON_RIGHT = 5,
BUTTON_DOWN = 6,
BUTTON_UP = 7,
} Button_TypeDef;
typedef enum
{
BUTTON_MODE_GPIO = 0,
BUTTON_MODE_EXTI = 1,
BUTTON_MODE_EVT = 2
} ButtonMode_TypeDef;
/**
* @brief JOYSTICK Types Definition
*/
typedef enum
{
JOY_SEL = 0,
JOY_LEFT = 1,
JOY_RIGHT = 2,
JOY_DOWN = 3,
JOY_UP = 4,
JOY_NONE = 5
}JOYState_TypeDef;
typedef enum
{
JOY_MODE_GPIO = 0,
JOY_MODE_EXTI = 1
}JOYMode_TypeDef;
/**
* @brief COM Types Definition
*/
typedef enum
{
COM1 = 0,
COM2 = 1
} COM_TypeDef;
/**
* @}
*/
/** @defgroup STM3210E_EVAL_Exported_Constants STM3210E EVAL Exported Constants
* @{
*/
/**
* @brief Define for STM3210E_EVAL board
*/
#if !defined (USE_STM3210E_EVAL)
#define USE_STM3210E_EVAL
#endif
/** @defgroup STM3210E_EVAL_LED STM3210E EVAL LED
* @{
*/
#define LEDn 4
#define LED1_PIN GPIO_PIN_6 /* PF.06*/
#define LED1_GPIO_PORT GPIOF
#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE()
#define LED2_PIN GPIO_PIN_7 /* PF.07*/
#define LED2_GPIO_PORT GPIOF
#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE()
#define LED3_PIN GPIO_PIN_8 /* PF.08*/
#define LED3_GPIO_PORT GPIOF
#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE()
#define LED4_PIN GPIO_PIN_9 /* PF.09*/
#define LED4_GPIO_PORT GPIOF
#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE()
#define LEDx_GPIO_CLK_ENABLE(__LED__) do { if ((__LED__) == LED1) LED1_GPIO_CLK_ENABLE(); else\
if ((__LED__) == LED2) LED2_GPIO_CLK_ENABLE(); else \
if ((__LED__) == LED3) LED3_GPIO_CLK_ENABLE(); else\
if ((__LED__) == LED4) LED4_GPIO_CLK_ENABLE();} while(0)
#define LEDx_GPIO_CLK_DISABLE(__LED__) (((__LED__) == LED1) ? LED1_GPIO_CLK_DISABLE() :\
((__LED__) == LED2) ? LED2_GPIO_CLK_DISABLE() :\
((__LED__) == LED3) ? LED3_GPIO_CLK_DISABLE() :\
((__LED__) == LED4) ? LED4_GPIO_CLK_DISABLE() : 0 )
/**
* @}
*/
/** @defgroup STM3210E_EVAL_BUTTON STM3210E EVAL BUTTON
* @{
*/
#define JOYn 5
#define BUTTONn 3 + JOYn
/**
* @brief Tamper push-button
*/
#define TAMPER_BUTTON_PIN GPIO_PIN_13 /* PC.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_8 /* PG.08*/
#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 EXTI9_5_IRQn
/**
* @brief Wake-up push-button
*/
#define WAKEUP_BUTTON_PIN GPIO_PIN_0 /* PA.00*/
#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 Joystick Right push-button
*/
#define RIGHT_JOY_PIN GPIO_PIN_13 /* PG.13*/
#define RIGHT_JOY_GPIO_PORT GPIOG
#define RIGHT_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define RIGHT_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE()
#define RIGHT_JOY_EXTI_IRQn EXTI15_10_IRQn
/**
* @brief Joystick Left push-button
*/
#define LEFT_JOY_PIN GPIO_PIN_14 /* PG.14*/
#define LEFT_JOY_GPIO_PORT GPIOG
#define LEFT_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define LEFT_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE()
#define LEFT_JOY_EXTI_IRQn EXTI15_10_IRQn
/**
* @brief Joystick Up push-button
*/
#define UP_JOY_PIN GPIO_PIN_15 /* PG.15*/
#define UP_JOY_GPIO_PORT GPIOG
#define UP_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define UP_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE()
#define UP_JOY_EXTI_IRQn EXTI15_10_IRQn
/**
* @brief Joystick Down push-button
*/
#define DOWN_JOY_PIN GPIO_PIN_3 /* PD.03*/
#define DOWN_JOY_GPIO_PORT GPIOD
#define DOWN_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define DOWN_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
#define DOWN_JOY_EXTI_IRQn EXTI3_IRQn
/**
* @brief Joystick Sel push-button
*/
#define SEL_JOY_PIN GPIO_PIN_7 /* PG.07*/
#define SEL_JOY_GPIO_PORT GPIOG
#define SEL_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define SEL_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE()
#define SEL_JOY_EXTI_IRQn EXTI9_5_IRQn
#define BUTTONx_GPIO_CLK_ENABLE(__BUTTON__) do { if ((__BUTTON__) == BUTTON_TAMPER) TAMPER_BUTTON_GPIO_CLK_ENABLE(); else\
if ((__BUTTON__) == BUTTON_KEY) KEY_BUTTON_GPIO_CLK_ENABLE(); else\
if ((__BUTTON__) == BUTTON_WAKEUP) WAKEUP_BUTTON_GPIO_CLK_ENABLE(); else\
if ((__BUTTON__) == BUTTON_SEL) SEL_JOY_GPIO_CLK_ENABLE(); else\
if ((__BUTTON__) == BUTTON_LEFT) LEFT_JOY_GPIO_CLK_ENABLE(); else\
if ((__BUTTON__) == BUTTON_RIGHT) RIGHT_JOY_GPIO_CLK_ENABLE(); else\
if ((__BUTTON__) == BUTTON_DOWN) DOWN_JOY_GPIO_CLK_ENABLE(); else\
if ((__BUTTON__) == BUTTON_UP) UP_JOY_GPIO_CLK_ENABLE();} while(0)
#define BUTTONx_GPIO_CLK_DISABLE(__BUTTON__) (((__BUTTON__) == BUTTON_TAMPER) ? TAMPER_BUTTON_GPIO_CLK_DISABLE() :\
((__BUTTON__) == BUTTON_KEY) ? KEY_BUTTON_GPIO_CLK_DISABLE() :\
((__BUTTON__) == BUTTON_WAKEUP) ? WAKEUP_BUTTON_GPIO_CLK_DISABLE() :\
((__BUTTON__) == BUTTON_SEL) ? SEL_JOY_GPIO_CLK_DISABLE() :\
((__BUTTON__) == BUTTON_LEFT) ? LEFT_JOY_GPIO_CLK_DISABLE() :\
((__BUTTON__) == BUTTON_RIGHT) ? RIGHT_JOY_GPIO_CLK_DISABLE() :\
((__BUTTON__) == BUTTON_DOWN) ? DOWN_JOY_GPIO_CLK_DISABLE() :\
((__BUTTON__) == BUTTON_UP) ? UP_JOY_GPIO_CLK_DISABLE() : 0 )
#define JOYx_GPIO_CLK_ENABLE(__JOY__) do { if ((__JOY__) == JOY_SEL) SEL_JOY_GPIO_CLK_ENABLE(); else\
if ((__JOY__) == JOY_LEFT) LEFT_JOY_GPIO_CLK_ENABLE(); else\
if ((__JOY__) == JOY_RIGHT) RIGHT_JOY_GPIO_CLK_ENABLE(); else\
if ((__JOY__) == JOY_DOWN) DOWN_JOY_GPIO_CLK_ENABLE(); else\
if ((__JOY__) == JOY_UP) UP_JOY_GPIO_CLK_ENABLE();} while(0)
#define JOYx_GPIO_CLK_DISABLE(__JOY__) (((__JOY__) == JOY_SEL) ? SEL_JOY_GPIO_CLK_DISABLE() :\
((__JOY__) == JOY_LEFT) ? LEFT_JOY_GPIO_CLK_DISABLE() :\
((__JOY__) == JOY_RIGHT) ? RIGHT_JOY_GPIO_CLK_DISABLE() :\
((__JOY__) == JOY_DOWN) ? DOWN_JOY_GPIO_CLK_DISABLE() :\
((__JOY__) == JOY_UP) ? UP_JOY_GPIO_CLK_DISABLE() : 0 )
/**
* @}
*/
/** @addtogroup STM3210E_EVAL_COM
* @{
*/
#define COMn 2
/**
* @brief Definition for COM port1, connected to USART1
*/
#define EVAL_COM1 USART1
#define EVAL_COM1_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()
#define EVAL_COM1_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()
#define EVAL_COM1_TX_PIN GPIO_PIN_9 /* PA.09*/
#define EVAL_COM1_TX_GPIO_PORT GPIOA
#define EVAL_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define EVAL_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define EVAL_COM1_RX_PIN GPIO_PIN_10 /* PA.10*/
#define EVAL_COM1_RX_GPIO_PORT GPIOA
#define EVAL_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define EVAL_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define EVAL_COM1_IRQn USART1_IRQn
/**
* @brief Definition for COM port2, connected to USART2
*/
#define EVAL_COM2 USART2
#define EVAL_COM2_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE()
#define EVAL_COM2_CLK_DISABLE() __HAL_RCC_USART2_CLK_DISABLE()
#define EVAL_COM2_TX_PIN GPIO_PIN_2 /* PA.02*/
#define EVAL_COM2_TX_GPIO_PORT GPIOA
#define EVAL_COM2_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define EVAL_COM2_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define EVAL_COM2_RX_PIN GPIO_PIN_3 /* PA.03*/
#define EVAL_COM2_RX_GPIO_PORT GPIOA
#define EVAL_COM2_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define EVAL_COM2_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define EVAL_COM2_IRQn USART2_IRQn
#define COMx_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) EVAL_COM1_CLK_ENABLE(); else\
if((__INDEX__) == COM2) EVAL_COM2_CLK_ENABLE();} while(0)
#define COMx_CLK_DISABLE(__INDEX__) (((__INDEX__) == COM1) ? EVAL_COM1_CLK_DISABLE() :\
((__INDEX__) == COM2) ? EVAL_COM2_CLK_DISABLE() : 0)
#define COMx_TX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) EVAL_COM1_TX_GPIO_CLK_ENABLE(); else\
if((__INDEX__) == COM2) EVAL_COM2_TX_GPIO_CLK_ENABLE();} while(0)
#define COMx_TX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == COM1) ? EVAL_COM1_TX_GPIO_CLK_DISABLE() :\
((__INDEX__) == COM2) ? EVAL_COM2_TX_GPIO_CLK_DISABLE() : 0)
#define COMx_RX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) EVAL_COM1_RX_GPIO_CLK_ENABLE(); else\
if((__INDEX__) == COM2) EVAL_COM2_RX_GPIO_CLK_ENABLE();} while(0)
#define COMx_RX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == COM1) ? EVAL_COM1_RX_GPIO_CLK_DISABLE() :\
((__INDEX__) == COM2) ? EVAL_COM2_RX_GPIO_CLK_DISABLE() : 0)
/**
* @}
*/
/** @defgroup STM3210E_EVAL_BUS STM3210E EVAL BUS
* @{
*/
/* Exported constant IO ------------------------------------------------------*/
/*##################### I2Cx ###################################*/
/* User can use this section to tailor I2Cx instance used and associated
resources */
/* Definition for I2Cx Pins */
#define EVAL_I2Cx_SCL_PIN GPIO_PIN_6 /* PB.06*/
#define EVAL_I2Cx_SCL_GPIO_PORT GPIOB
#define EVAL_I2Cx_SDA_PIN GPIO_PIN_7 /* PB.07*/
#define EVAL_I2Cx_SDA_GPIO_PORT GPIOB
/* Definition for I2Cx clock resources */
#define EVAL_I2Cx I2C1
#define EVAL_I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE()
#define EVAL_I2Cx_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define EVAL_I2Cx_SCL_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's NVIC */
#define EVAL_I2Cx_EV_IRQn I2C1_EV_IRQn
#define EVAL_I2Cx_EV_IRQHandler I2C1_EV_IRQHandler
#define EVAL_I2Cx_ER_IRQn I2C1_ER_IRQn
#define EVAL_I2Cx_ER_IRQHandler I2C1_ER_IRQHandler
/* I2C clock speed configuration (in Hz)
WARNING:
Make sure that this define is not already declared in other files (ie.
stm3210e_eval.h file). It can be used in parallel by other modules. */
#ifndef BSP_I2C_SPEED
#define BSP_I2C_SPEED 100000
#endif /* I2C_SPEED */
/* Maximum Timeout values for flags waiting loops. These timeouts are not based
on accurate values, they just guarantee that the application will not remain
stuck if the I2C communication is corrupted.
You may modify these timeout values depending on CPU frequency and application
conditions (interrupts routines ...). */
#define EVAL_I2Cx_TIMEOUT_MAX 3000
/*##################### SPIx ###################################*/
#define EVAL_SPIx SPI1
#define EVAL_SPIx_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE()
#define EVAL_SPIx_SCK_GPIO_PORT GPIOA /* PA.05*/
#define EVAL_SPIx_SCK_PIN GPIO_PIN_5
#define EVAL_SPIx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define EVAL_SPIx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define EVAL_SPIx_MISO_MOSI_GPIO_PORT GPIOA
#define EVAL_SPIx_MISO_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define EVAL_SPIx_MISO_MOSI_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define EVAL_SPIx_MISO_PIN GPIO_PIN_6 /* PA.06*/
#define EVAL_SPIx_MOSI_PIN GPIO_PIN_7 /* PA.07*/
/* Maximum Timeout values for flags waiting loops. These timeouts 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 EVAL_SPIx_TIMEOUT_MAX 1000
/**
* @}
*/
/** @defgroup STM3210E_EVAL_COMPONENT STM3210E EVAL COMPONENT
* @{
*/
/*##################### FLASH SPI ###################################*/
/**
* @brief M25P FLASH SPI Chip Select macro definition
*/
#define FLASH_SPI_CS_LOW() HAL_GPIO_WritePin(FLASH_SPI_CS_GPIO_PORT, FLASH_SPI_CS_PIN, GPIO_PIN_RESET)
#define FLASH_SPI_CS_HIGH() HAL_GPIO_WritePin(FLASH_SPI_CS_GPIO_PORT, FLASH_SPI_CS_PIN, GPIO_PIN_SET)
/**
* @brief M25P FLASH SPI Control Interface pins
*/
#define FLASH_SPI_CS_PIN GPIO_PIN_2 /* PB.02*/
#define FLASH_SPI_CS_GPIO_PORT GPIOB
#define FLASH_SPI_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define FLASH_SPI_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
/**
* @brief M25P FLASH SPI supported commands
*/
#define FLASH_SPI_CMD_WRITE 0x02 /*!< Write to Memory instruction */
#define FLASH_SPI_CMD_WRSR 0x01 /*!< Write Status Register instruction */
#define FLASH_SPI_CMD_WREN 0x06 /*!< Write enable instruction */
#define FLASH_SPI_CMD_READ 0x03 /*!< Read from Memory instruction */
#define FLASH_SPI_CMD_RDSR 0x05 /*!< Read Status Register instruction */
#define FLASH_SPI_CMD_RDID 0x9F /*!< Read identification */
#define FLASH_SPI_CMD_SE 0xD8 /*!< Sector Erase instruction */
#define FLASH_SPI_CMD_BE 0xC7 /*!< Bulk Erase instruction */
#define FLASH_SPI_WIP_FLAG 0x01 /*!< Write In Progress (WIP) flag */
#define FLASH_SPI_DUMMY_BYTE 0xA5
#define FLASH_SPI_PAGESIZE 0x100
#define FLASH_SPI_M25P128_ID 0x202018
#define FLASH_SPI_M25P64_ID 0x202017
/*##################### AUDIO ##########################*/
/**
* @brief AUDIO I2C Interface pins
*/
#define AUDIO_I2C_ADDRESS 0x27
/* Audio Reset Pin definition */
#define AUDIO_RESET_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define AUDIO_RESET_PIN GPIO_PIN_11
#define AUDIO_RESET_GPIO GPIOG
/**
* @}
*/
/**
* @}
*/
/** @addtogroup STM3210E_EVAL_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);
#ifdef HAL_UART_MODULE_ENABLED
void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef* huart);
#endif /* HAL_UART_MODULE_ENABLED */
uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode);
JOYState_TypeDef BSP_JOY_GetState(void);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210E_EVAL_H */

View File

@ -1,707 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_audio.c
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file provides the Audio driver for the STM3210E-Eval
* board.
@verbatim
==============================================================================
##### How to use this driver #####
==============================================================================
[..]
(#) This driver supports STM32F103xE devices on STM3210E-Eval Kit:
(++) to play an audio file (all functions names start by BSP_AUDIO_OUT_xxx)
[..]
(#) PLAY A FILE:
(++) Call the function BSP_AUDIO_OUT_Init(
OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER,
OUTPUT_DEVICE_HEADPHONE, 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 (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_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 BSP_AUDIO_OUT_XXXCallBack() and only
their prototypes are declared in the stm3210e_eval_audio.h file.
(refer to the example for more details on the callbacks implementations)
(++) To Stop playing, to modify the volume level, the frequency 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
stm3210e_eval_audio.h file.
(++) This driver provide the High Audio Layer: consists of the function API
exported in the stm3210e_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 stm3210e_eval_audio.c file (I2SOUT_Init()...)
[..]
##### Known Limitations #####
==============================================================================
(#) 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.
(#) 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 BSP_AUDIO_OUT_SetMute()or BSP_AUDIO_OUT_SetOutputMode()).
When the audio data is played, no communication is required with the audio codec.
(#) 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.
(#) Mono audio streaming is not supported (in order 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).
(#) Supports only 16-bit audio data size.
@endverbatim
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 "stm32f1xx_hal.h" /* Include HAL driver definitions to have access to I2S literals in audio driver */
#include "stm3210e_eval_audio.h"
/* Private variables ---------------------------------------------------------*/
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @defgroup STM3210E_EVAL_AUDIO STM3210E EVAL AUDIO
* @brief This file includes the low layer audio driver available on STM3210E-Eval
* eval board.
* @{
*/
/** @defgroup STM3210E_EVAL_AUDIO_Private_Macros STM3210E EVAL AUDIO Private Macros
* @{
*/
/**
* @}
*/
/** @defgroup STM3210E_EVAL_AUDIO_Private_Variables STM3210E EVAL AUDIO Private Variables
* @{
*/
#define AUDIO_SAMPLE_SENDDUMMYDATA_SIZE 8
const uint16_t audio_sample_SendDummyData[] =
{0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
static __IO uint32_t SendDummyData = DISABLE; /* Variable to switch between sending dummy data or audio data on bus I2S */
/*### PLAY ###*/
static AUDIO_DrvTypeDef *pAudioDrv;
I2S_HandleTypeDef hAudioOutI2s;
/**
* @}
*/
/** @defgroup STM3210E_EVAL_AUDIO_Private_Function_Prototypes STM3210E EVAL AUDIO Private Function Prototypes
* @{
*/
static void I2SOUT_Init(uint32_t AudioFreq);
static void I2SOUT_DeInit(void);
static uint8_t I2SOUT_SendDummyData_Start(uint16_t* pBuffer, uint32_t Size);
static uint8_t I2SOUT_SendDummyData_Stop(void);
/**
* @}
*/
/** @defgroup STM3210E_EVAL_AUDIO_OUT_Exported_Functions STM3210E EVAL AUDIO OUT Exported Functions
* @{
*/
/**
* @brief Configure the audio peripherals.
* @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE,
* OUTPUT_DEVICE_BOTH.
* @param Volume: Initial volume level (from 0 (Mute) to 100 (Max))
* @param AudioFreq: Audio frequency used to play the audio stream.
* @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 */
I2SOUT_DeInit();
/* I2S data transfer preparation:
Prepare the Media to be used for the audio transfer from memory to I2S peripheral */
hAudioOutI2s.Instance = I2SOUT;
if(HAL_I2S_GetState(&hAudioOutI2s) == HAL_I2S_STATE_RESET)
{
/* Init the I2S MSP: this __weak function can be redefined by the application*/
BSP_AUDIO_OUT_MspInit(&hAudioOutI2s, NULL);
}
/* I2S data transfer preparation: */
/* Prepare the Media to be used for the audio transfer from memory to I2S */
/* peripheral. */
/* Note: This function must be called before audio codec init because */
/* I2S initialisation parameter "MCLKOutput" determines whether the */
/* audio Codec is driven by I2S clock (I2S_MCLKOUTPUT_ENABLE) */
/* or by its own internal PLL (I2S_MCLKOUTPUT_DISABLE). */
/* Configure the I2S peripheral */
/* Switch to send dummy data on bus I2S (switch used in I2SOUT_Init() */
SendDummyData = ENABLE;
I2SOUT_Init(AudioFreq);
/* Assign value to codec driver parameter I2S_MCLKOutput in function of */
/* I2S initialisation parameter "MCLKOutput". */
if (hAudioOutI2s.Init.MCLKOutput == I2S_MCLKOUTPUT_DISABLE)
{
ak4343_MCLKOutput(0);
}
else
{
ak4343_MCLKOutput(1);
}
/* Initialize the audio driver structure */
pAudioDrv = &ak4343_drv;
/* Generate I2S master clock MCK */
/* (Start the audio player to send dummy data on I2S bus) */
if(I2SOUT_SendDummyData_Start((uint16_t *)audio_sample_SendDummyData, AUDIO_SAMPLE_SENDDUMMYDATA_SIZE) == 0)
{
if (pAudioDrv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq) == 0)
{
ret = AUDIO_OK;
}
else
{
ret = AUDIO_ERROR;
}
I2SOUT_SendDummyData_Stop();
/* Switch to send audio data on bus I2S */
SendDummyData = DISABLE;
I2SOUT_Init(AudioFreq);
}
else
{
ret = AUDIO_ERROR;
}
return ret;
}
/**
* @brief De-initialize the audio peripherals.
*/
void BSP_AUDIO_OUT_DeInit(void)
{
I2SOUT_DeInit();
/* DeInit the I2S MSP : this __weak function can be rewritten by the application */
BSP_AUDIO_OUT_MspDeInit(&hAudioOutI2s, 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(pAudioDrv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Update the Media layer and enable it for play */
HAL_I2S_Transmit_DMA(&hAudioOutI2s, pBuffer, DMA_MAX(Size));
return AUDIO_OK;
}
}
/**
* @brief Sends n-Bytes on the I2S interface.
* @param pData: pointer on 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(&hAudioOutI2s, pData, Size);
}
/**
* @brief This function Pauses the audio file stream. In case
* of using DMA, the DMA Pause feature is used.
* @note 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(pAudioDrv->Pause(AUDIO_I2C_ADDRESS) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Call the Media layer pause function */
HAL_I2S_DMAPause(&hAudioOutI2s);
/* Return AUDIO_OK if all operations are OK */
return AUDIO_OK;
}
}
/**
* @brief This function Resumes the audio file stream.
* @note 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(pAudioDrv->Resume(AUDIO_I2C_ADDRESS) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Call the Media layer resume function */
HAL_I2S_DMAResume(&hAudioOutI2s);
/* Return AUDIO_OK if all operations are OK */
return AUDIO_OK;
}
}
/**
* @brief Stops audio playing and Power down the Audio Codec.
* @param Option: could be one of the following parameters
* - 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 DMA Stop to disable DMA stream before stopping codec */
HAL_I2S_DMAStop(&hAudioOutI2s);
/* Call Audio Codec Stop function */
if(pAudioDrv->Stop(AUDIO_I2C_ADDRESS, Option) != 0)
{
return AUDIO_ERROR;
}
else
{
if(Option == CODEC_PDWN_HW)
{
/* Wait at least 100us */
HAL_Delay(1);
/* Power Down the codec */
HAL_GPIO_WritePin(AUDIO_RESET_GPIO, AUDIO_RESET_PIN, GPIO_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(pAudioDrv->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(pAudioDrv->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).
* @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER,
* OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH
* @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(pAudioDrv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0)
{
return AUDIO_ERROR;
}
else
{
/* Return AUDIO_OK when all operations are correctly done */
return AUDIO_OK;
}
}
/**
* @brief Update the audio frequency.
* @param AudioFreq: Audio frequency used to play the audio stream.
* @retval None
* @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the
* audio frequency.
*/
void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq)
{
/* Update the I2S audio frequency configuration */
I2SOUT_Init(AudioFreq);
}
/**
* @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 gpioinitstruct = {0};
/* Enable I2SOUT clock */
I2SOUT_CLK_ENABLE();
/*** Configure the GPIOs ***/
/* Enable I2S GPIO clocks */
I2SOUT_SCK_SD_CLK_ENABLE();
I2SOUT_WS_CLK_ENABLE();
/* I2SOUT pins configuration: WS, SCK and SD pins -----------------------------*/
gpioinitstruct.Pin = I2SOUT_SCK_PIN | I2SOUT_SD_PIN;
gpioinitstruct.Mode = GPIO_MODE_AF_PP;
gpioinitstruct.Pull = GPIO_NOPULL;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
HAL_GPIO_Init(I2SOUT_SCK_SD_GPIO_PORT, &gpioinitstruct);
gpioinitstruct.Pin = I2SOUT_WS_PIN ;
HAL_GPIO_Init(I2SOUT_WS_GPIO_PORT, &gpioinitstruct);
/* I2SOUT pins configuration: MCK pin */
I2SOUT_MCK_CLK_ENABLE();
gpioinitstruct.Pin = I2SOUT_MCK_PIN;
HAL_GPIO_Init(I2SOUT_MCK_GPIO_PORT, &gpioinitstruct);
/* Enable the I2S DMA clock */
I2SOUT_DMAx_CLK_ENABLE();
if(hi2s->Instance == I2SOUT)
{
/* Configure the hdma_i2stx handle parameters */
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 = I2SOUT_DMAx_PERIPH_DATA_SIZE;
hdma_i2stx.Init.MemDataAlignment = I2SOUT_DMAx_MEM_DATA_SIZE;
/* Configuration change depending on sending dummy data or audio data on bus I2S */
if (SendDummyData != ENABLE)
{
hdma_i2stx.Init.Mode = DMA_NORMAL;
}
else
{
hdma_i2stx.Init.Mode = DMA_CIRCULAR;
}
hdma_i2stx.Init.Priority = DMA_PRIORITY_HIGH;
hdma_i2stx.Instance = I2SOUT_DMAx_CHANNEL;
/* Associate the DMA handle */
__HAL_LINKDMA(hi2s, hdmatx, hdma_i2stx);
/* Deinitialize the Channel for new transfer */
HAL_DMA_DeInit(&hdma_i2stx);
/* Configure the DMA Channel */
HAL_DMA_Init(&hdma_i2stx);
}
/* I2S DMA IRQ Channel configuration */
HAL_NVIC_SetPriority(I2SOUT_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0);
HAL_NVIC_EnableIRQ(I2SOUT_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 gpioinitstruct;
/* Disable I2S clock */
I2SOUT_CLK_DISABLE();
/* CODEC_I2S pins configuration: WS, SCK and SD pins */
gpioinitstruct.Pin = I2SOUT_WS_PIN | I2SOUT_SCK_PIN | I2SOUT_SD_PIN;
HAL_GPIO_DeInit(I2SOUT_SCK_SD_GPIO_PORT, gpioinitstruct.Pin);
/* CODEC_I2S pins configuration: MCK pin */
gpioinitstruct.Pin = I2SOUT_MCK_PIN;
HAL_GPIO_DeInit(I2SOUT_MCK_GPIO_PORT, gpioinitstruct.Pin);
}
/**
* @brief Tx Transfer completed callbacks
* @param hi2s: I2S handle
*/
void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s)
{
if(hi2s->Instance == I2SOUT)
{
/* Configuration change depending on sending dummy data or audio data on bus I2S */
if (SendDummyData != ENABLE)
{
/* Call the user function which will manage directly transfer complete */
BSP_AUDIO_OUT_TransferComplete_CallBack();
}
else
{
/* No action */
}
}
}
/**
* @brief Tx Transfer Half completed callbacks
* @param hi2s: I2S handle
*/
void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s)
{
if(hi2s->Instance == I2SOUT)
{
/* Manage the remaining file size and new address offset: This function
should be coded by user (its prototype is already declared in stm3210e_eval_audio.h) */
BSP_AUDIO_OUT_HalfTransfer_CallBack();
}
}
/**
* @brief I2S error callbacks
* @param hi2s: I2S handle
*/
void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s)
{
/* Manage the error generated on DMA FIFO: This function
should be coded by user (its prototype is already declared in stm3210e_eval_audio.h) */
if(hi2s->Instance == I2SOUT)
{
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 Function
*******************************************************************************/
/**
* @brief Initializes the Audio Codec audio interface (I2S)
* @param AudioFreq: Audio frequency to be configured for the I2S peripheral.
*/
static void I2SOUT_Init(uint32_t AudioFreq)
{
/* Initialize the hAudioOutI2s Instance parameter */
hAudioOutI2s.Instance = I2SOUT;
/* Disable I2S block */
__HAL_I2S_DISABLE(&hAudioOutI2s);
/* I2SOUT peripheral configuration */
hAudioOutI2s.Init.AudioFreq = AudioFreq;
hAudioOutI2s.Init.CPOL = I2S_CPOL_LOW;
hAudioOutI2s.Init.DataFormat = I2S_DATAFORMAT_16B;
hAudioOutI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE;
hAudioOutI2s.Init.Mode = I2S_MODE_MASTER_TX;
hAudioOutI2s.Init.Standard = I2S_STANDARD;
/* Initialize the I2S peripheral with the structure above */
HAL_I2S_Init(&hAudioOutI2s);
}
/**
* @brief Deinitialize the Audio Codec audio interface (I2S).
*/
static void I2SOUT_DeInit(void)
{
/* Initialize the hAudioOutI2s Instance parameter */
hAudioOutI2s.Instance = I2SOUT;
/* Disable I2S peripheral */
__HAL_I2S_DISABLE(&hAudioOutI2s);
HAL_I2S_DeInit(&hAudioOutI2s);
}
/**
* @brief Starts sending dummy data as audio stream: function used to
generate I2S master clock MCK for audio codec device.
* @param pBuffer: Pointer to the buffer
* @param Size: Number of audio data BYTES.
* @retval AUDIO_OK if correct communication, else wrong communication
*/
static uint8_t I2SOUT_SendDummyData_Start(uint16_t* pBuffer, uint32_t Size)
{
/* Update the Media layer and enable it for play */
HAL_I2S_Transmit_DMA(&hAudioOutI2s, pBuffer, DMA_MAX(Size));
return AUDIO_OK;
}
/**
* @brief Stops sending dummy data as audio stream: function used to stop to
generate I2S master clock MCK for audio codec device.
* @retval AUDIO_OK if correct communication, else wrong communication
*/
static uint8_t I2SOUT_SendDummyData_Stop(void)
{
/* Call DMA Stop to disable DMA stream before stopping codec */
HAL_I2S_DMAStop(&hAudioOutI2s);
return AUDIO_OK;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,166 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_audio.h
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* stm3210e_eval_audio.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210E_EVAL_AUDIO_H
#define __STM3210E_EVAL_AUDIO_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
/* Include audio component Driver */
#include "../Components/ak4343/ak4343.h"
#include "stm3210e_eval.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @addtogroup STM3210E_EVAL_AUDIO
* @{
*/
/** @defgroup STM3210E_EVAL_AUDIO_OUT_Exported_Constants STM3210E EVAL AUDIO OUT Exported Constants
* @{
*/
/*------------------------------------------------------------------------------
AUDIO OUT CONFIGURATION
------------------------------------------------------------------------------*/
/* I2S peripheral configuration defines */
#define I2SOUT SPI2
#define I2SOUT_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE()
#define I2SOUT_CLK_DISABLE() __HAL_RCC_SPI2_CLK_DISABLE()
#define I2SOUT_SCK_SD_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define I2SOUT_MCK_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define I2SOUT_WS_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define I2SOUT_WS_PIN GPIO_PIN_12 /* PB.12*/
#define I2SOUT_SCK_PIN GPIO_PIN_13 /* PB.13*/
#define I2SOUT_SD_PIN GPIO_PIN_15 /* PB.15*/
#define I2SOUT_MCK_PIN GPIO_PIN_6 /* PC.06*/
#define I2SOUT_SCK_SD_GPIO_PORT GPIOB
#define I2SOUT_WS_GPIO_PORT GPIOB
#define I2SOUT_MCK_GPIO_PORT GPIOC
/* I2S DMA Channel definitions */
#define I2SOUT_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE()
#define I2SOUT_DMAx_CHANNEL DMA1_Channel5
#define I2SOUT_DMAx_IRQ DMA1_Channel5_IRQn
#define I2SOUT_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD
#define I2SOUT_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD
#define DMA_MAX_SZE 0xFFFF
#define I2SOUT_IRQHandler DMA1_Channel5_IRQHandler
/* Select the interrupt preemption priority and subpriority for the DMA interrupt */
#define AUDIO_OUT_IRQ_PREPRIO 0xE /* Select the preemption priority level(0 is the highest) */
/*------------------------------------------------------------------------------
CONFIGURATION: Audio Driver Configuration parameters
------------------------------------------------------------------------------*/
/* Audio status definition */
#define AUDIO_OK 0
#define AUDIO_ERROR 1
#define AUDIO_TIMEOUT 2
/*------------------------------------------------------------------------------
OPTIONAL Configuration defines parameters
------------------------------------------------------------------------------*/
/**
* @}
*/
/** @defgroup STM3210E_EVAL_AUDIO_Exported_Macros STM3210E EVAL AUDIO Exported Macros
* @{
*/
#define DMA_MAX(_X_) (((_X_) <= DMA_MAX_SZE)? (_X_):DMA_MAX_SZE)
/**
* @}
*/
/** @addtogroup STM3210E_EVAL_AUDIO_OUT_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 Command);
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 need to be changed for specific
application needs */
void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params);
void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210E_EVAL_AUDIO_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,192 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_lcd.h
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* the stm3210e_eval_lcd.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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.
*
******************************************************************************
*/
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM3210E_EVAL_LCD_H
#define __STM3210E_EVAL_LCD_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm3210e_eval.h"
#include "../Components/hx8347d/hx8347d.h"
#include "../Components/spfd5408/spfd5408.h"
#include "../Components/ili9320/ili9320.h"
#include "../../../Utilities/Fonts/fonts.h"
/** @addtogroup STM3210E_EVAL_LCD
* @{
*/
/** @defgroup STM3210E_EVAL_LCD_Exported_Types STM3210E EVAL LCD Exported Types
* @{
*/
typedef struct
{
uint32_t TextColor;
uint32_t BackColor;
sFONT *pFont;
}LCD_DrawPropTypeDef;
/**
* @}
*/
/** @defgroup STM3210E_EVAL_LCD_Exported_Constants STM3210E 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 (uint16_t)0x001F
#define LCD_COLOR_GREEN (uint16_t)0x07E0
#define LCD_COLOR_RED (uint16_t)0xF800
#define LCD_COLOR_CYAN (uint16_t)0x07FF
#define LCD_COLOR_MAGENTA (uint16_t)0xF81F
#define LCD_COLOR_YELLOW (uint16_t)0xFFE0
#define LCD_COLOR_LIGHTBLUE (uint16_t)0x841F
#define LCD_COLOR_LIGHTGREEN (uint16_t)0x87F0
#define LCD_COLOR_LIGHTRED (uint16_t)0xFC10
#define LCD_COLOR_LIGHTCYAN (uint16_t)0x87FF
#define LCD_COLOR_LIGHTMAGENTA (uint16_t)0xFC1F
#define LCD_COLOR_LIGHTYELLOW (uint16_t)0xFFF0
#define LCD_COLOR_DARKBLUE (uint16_t)0x0010
#define LCD_COLOR_DARKGREEN (uint16_t)0x0400
#define LCD_COLOR_DARKRED (uint16_t)0x8000
#define LCD_COLOR_DARKCYAN (uint16_t)0x0410
#define LCD_COLOR_DARKMAGENTA (uint16_t)0x8010
#define LCD_COLOR_DARKYELLOW (uint16_t)0x8400
#define LCD_COLOR_WHITE (uint16_t)0xFFFF
#define LCD_COLOR_LIGHTGRAY (uint16_t)0xD69A
#define LCD_COLOR_GRAY (uint16_t)0x8410
#define LCD_COLOR_DARKGRAY (uint16_t)0x4208
#define LCD_COLOR_BLACK (uint16_t)0x0000
#define LCD_COLOR_BROWN (uint16_t)0xA145
#define LCD_COLOR_ORANGE (uint16_t)0xFD20
/**
* @brief LCD default font
*/
#define LCD_DEFAULT_FONT Font24
/**
* @}
*/
/** @addtogroup STM3210E_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_FillTriangle(uint16_t X1, uint16_t X2, uint16_t X3, uint16_t Y1, uint16_t Y2, uint16_t Y3);
void BSP_LCD_FillPolygon(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_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
void BSP_LCD_DisplayOff(void);
void BSP_LCD_DisplayOn(void);
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210E_EVAL_LCD_H */
/**
* @}
*/
/**
* @}
*/

View File

@ -1,265 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_nand.c
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file includes a standard driver for the NAND512W3A2CN6E NAND flash memory
* device mounted on STM3210E-EVAL evaluation board.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 NAND512W3A2CN6E NAND flash external memory mounted
on STM3210E-EVAL evaluation board.
- This driver does not need a specific component driver for the NAND device
to be included with.
2. Driver description:
---------------------
+ Initialization steps:
o Initialize the NAND external memory using the BSP_NAND_Init() function. This
function includes the MSP layer hardware resources initialization and the
FMC controller configuration to interface with the external NAND memory.
+ NAND flash operations
o NAND 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_NAND_ReadData()/BSP_NAND_WriteData(). The BSP_NAND_WriteData() performs write operation
of an amount of data by unit (halfword).
o The function BSP_NAND_Read_ID() returns the chip IDs stored in the structure
"NAND_IDTypeDef". (see the NAND IDs in the memory data sheet)
o Perform erase block operation using the function BSP_NAND_Erase_Block() and by
specifying the block address.
------------------------------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
#include "stm3210e_eval_nand.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @defgroup STM3210E_EVAL_NAND STM3210E EVAL NAND
* @{
*/
/* Private variables ---------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_NAND_Private_Variables STM3210E EVAL NAND Private Variables
* @{
*/
static NAND_HandleTypeDef nandHandle;
static FSMC_NAND_PCC_TimingTypeDef Timing;
/**
* @}
*/
/* Private function prototypes -----------------------------------------------*/
/** @defgroup STM3210E_EVAL_NAND_Private_Function_Prototypes STM3210E EVAL NAND Private Function Prototypes
* @{
*/
static void NAND_MspInit(void);
/**
* @}
*/
/* Private functions ---------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_NAND_Exported_Functions STM3210E EVAL NAND Exported Functions
* @{
*/
/**
* @brief Initializes the NAND device.
* @retval NAND memory status
*/
uint8_t BSP_NAND_Init(void)
{
nandHandle.Instance = FSMC_NAND_DEVICE;
/*NAND Configuration */
Timing.SetupTime = 0U;
Timing.WaitSetupTime = 2U;
Timing.HoldSetupTime = 1U;
Timing.HiZSetupTime = 0U;
nandHandle.Init.NandBank = FSMC_NAND_BANK2;
nandHandle.Init.Waitfeature = FSMC_NAND_PCC_WAIT_FEATURE_ENABLE;
nandHandle.Init.MemoryDataWidth = FSMC_NAND_PCC_MEM_BUS_WIDTH_8;
nandHandle.Init.EccComputation = FSMC_NAND_ECC_ENABLE;
nandHandle.Init.ECCPageSize = FSMC_NAND_ECC_PAGE_SIZE_512BYTE;
nandHandle.Init.TCLRSetupTime = 0U;
nandHandle.Init.TARSetupTime = 0U;
nandHandle.Config.BlockNbr = NAND_MAX_PLANE;
nandHandle.Config.BlockSize = NAND_BLOCK_SIZE;
nandHandle.Config.PlaneSize = NAND_PLANE_SIZE;
nandHandle.Config.PageSize = NAND_PAGE_SIZE;
nandHandle.Config.SpareAreaSize = NAND_SPARE_AREA_SIZE;
/* NAND controller initialization */
NAND_MspInit();
if(HAL_NAND_Init(&nandHandle, &Timing, &Timing) != HAL_OK)
{
return NAND_ERROR;
}
else
{
return NAND_OK;
}
}
/**
* @brief Reads an amount of data from the NAND device.
* @param BlockAddress: Block address to Read
* @param pData: Pointer to data to be read
* @param uwNumPage: Number of Pages to read to Block
* @retval NAND memory status
*/
uint8_t BSP_NAND_ReadData(NAND_AddressTypeDef BlockAddress, uint8_t* pData, uint32_t uwNumPage)
{
/* Read data from NAND */
if (HAL_NAND_Read_Page_8b(&nandHandle, &BlockAddress, pData, uwNumPage) != HAL_OK)
{
return NAND_ERROR;
}
return NAND_OK;
}
/**
* @brief Writes an amount of data to the NAND device.
* @param BlockAddress: Block address to Write
* @param pData: Pointer to data to be written
* @param uwNumPage: Number of Pages to write to Block
* @retval NAND memory status
*/
uint8_t BSP_NAND_WriteData(NAND_AddressTypeDef BlockAddress, uint8_t* pData, uint32_t uwNumPage)
{
/* Write data to NAND */
if (HAL_NAND_Write_Page_8b(&nandHandle, &BlockAddress, pData, uwNumPage) != HAL_OK)
{
return NAND_ERROR;
}
return NAND_OK;
}
/**
* @brief Erases the specified block of the NAND device.
* @param BlockAddress: Block address to Erase
* @retval NAND memory status
*/
uint8_t BSP_NAND_Erase_Block(NAND_AddressTypeDef BlockAddress)
{
/* Send NAND erase block operation */
if (HAL_NAND_Erase_Block(&nandHandle, &BlockAddress) != HAL_OK)
{
return NAND_ERROR;
}
return NAND_OK;
}
/**
* @brief Reads NAND flash IDs.
* @param pNAND_ID : Pointer to NAND ID structure
* @retval NAND memory status
*/
uint8_t BSP_NAND_Read_ID(NAND_IDTypeDef *pNAND_ID)
{
if(HAL_NAND_Read_ID(&nandHandle, pNAND_ID) != HAL_OK)
{
return NAND_ERROR;
}
else
{
return NAND_OK;
}
}
/**
* @brief Initializes the NAND MSP.
*/
static void NAND_MspInit(void)
{
GPIO_InitTypeDef gpioinitstruct = {0};
/* Enable FSMC clock */
__HAL_RCC_FSMC_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 */
gpioinitstruct.Mode = GPIO_MODE_AF_PP;
gpioinitstruct.Pull = GPIO_PULLUP;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
/*-- GPIO Configuration ------------------------------------------------------*/
/*!< CLE, ALE, D0->D3, NOE, NWE and NCE2 NAND pin configuration */
gpioinitstruct.Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_14 | GPIO_PIN_15 |
GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 |
GPIO_PIN_7;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
/*!< D4->D7 NAND pin configuration */
gpioinitstruct.Pin = GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10;
HAL_GPIO_Init(GPIOE, &gpioinitstruct);
/*!< NWAIT NAND pin configuration */
gpioinitstruct.Pin = GPIO_PIN_6;
gpioinitstruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
/*!< INT2 NAND pin configuration */
gpioinitstruct.Pin = GPIO_PIN_6;
HAL_GPIO_Init(GPIOG, &gpioinitstruct);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,104 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_nand.h
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* the stm3210e_eval_nand.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210E_EVAL_NAND_H
#define __STM3210E_EVAL_NAND_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @addtogroup STM3210E_EVAL_NAND
* @{
*/
/* Exported constants --------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_NAND_Exported_Constants STM3210E EVAL NAND Exported Constants
* @{
*/
/**
* @brief NAND status structure definition
*/
#define NAND_OK 0x00U
#define NAND_DEVICE_ADDR ((uint32_t)NAND_DEVICE1)
/**
* @brief FSMC NAND memory parameters
*/
#define NAND_PAGE_SIZE ((uint16_t)0x0200) /* 512 bytes per page w/o Spare Area */
#define NAND_BLOCK_SIZE ((uint16_t)0x0020) /* 32x512 bytes pages per block */
#define NAND_PLANE_SIZE ((uint16_t)0x0400) /* 1024 Block per plane */
#define NAND_SPARE_AREA_SIZE ((uint16_t)0x0010) /* last 16 bytes as spare area */
#define NAND_MAX_PLANE ((uint16_t)0x1000) /* 4 planes of 1024 block */
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup STM3210E_EVAL_NAND_Exported_Functions
* @{
*/
uint8_t BSP_NAND_Init(void);
uint8_t BSP_NAND_ReadData(NAND_AddressTypeDef BlockAddress, uint8_t *pData, uint32_t uwDataSize);
uint8_t BSP_NAND_WriteData(NAND_AddressTypeDef BlockAddress, uint8_t *pData, uint32_t uwDataSize);
uint8_t BSP_NAND_Erase_Block(NAND_AddressTypeDef BlockAddress);
uint8_t BSP_NAND_Erase_Chip(void);
uint8_t BSP_NAND_Read_ID(NAND_IDTypeDef *pNAND_ID);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210E_EVAL_NAND_H */

View File

@ -1,387 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_nor.c
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file includes a standard driver for the M29W128GL70ZA6E NOR flash memory
* device mounted on STM3210E-EVAL evaluation board.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 M29W128GL NOR flash external memory mounted
on STM3210E-EVAL evaluation board.
- This driver does not need a specific component driver for the NOR device
to be included with.
2. Driver description:
---------------------
+ Initialization steps:
o Initialize the NOR external memory using the BSP_NOR_Init() function. This
function includes the MSP layer hardware resources initialization and the
FSMC controller configuration to interface with the external NOR memory.
+ NOR flash operations
o NOR 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_NOR_ReadData()/BSP_NOR_WriteData(). The BSP_NOR_WriteData() performs write operation
of an amount of data by unit (halfword). You can also perform a program data
operation of an amount of data using the function BSP_NOR_ProgramData().
o The function BSP_NOR_Read_ID() returns the chip IDs stored in the structure
"NOR_IDTypeDef". (see the NOR IDs in the memory data sheet)
o Perform erase block operation using the function BSP_NOR_Erase_Block() and by
specifying the block address. You can perform an erase operation of the whole
chip by calling the function BSP_NOR_Erase_Chip().
o After other operations, the function BSP_NOR_ReturnToReadMode() allows the NOR
flash to return to read mode to perform read operations on it.
------------------------------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
#include "stm3210e_eval_nor.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @defgroup STM3210E_EVAL_NOR STM3210E EVAL NOR
* @{
*/
/* Private variables ---------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_NOR_Private_Variables STM3210E EVAL NOR Private Variables
* @{
*/
static NOR_HandleTypeDef norHandle;
static FSMC_NORSRAM_TimingTypeDef Timing;
/**
* @}
*/
/* Private function prototypes -----------------------------------------------*/
/** @defgroup STM3210E_EVAL_NOR_Private_Function_Prototypes STM3210E EVAL NOR Private Function Prototypes
* @{
*/
static void NOR_MspInit(void);
/**
* @}
*/
/* Private functions ---------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_NOR_Exported_Functions STM3210E EVAL NOR Exported Functions
* @{
*/
/**
* @brief Initializes the NOR device.
* @retval NOR memory status
*/
uint8_t BSP_NOR_Init(void)
{
norHandle.Instance = FSMC_NORSRAM_DEVICE;
norHandle.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
/* NOR device configuration */
Timing.AddressSetupTime = 2;
Timing.AddressHoldTime = 1;
Timing.DataSetupTime = 5;
Timing.BusTurnAroundDuration = 0;
Timing.CLKDivision = 2;
Timing.DataLatency = 2;
Timing.AccessMode = FSMC_ACCESS_MODE_B;
norHandle.Init.NSBank = FSMC_NORSRAM_BANK2;
norHandle.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
norHandle.Init.MemoryType = FSMC_MEMORY_TYPE_NOR;
norHandle.Init.MemoryDataWidth = NOR_MEMORY_WIDTH;
norHandle.Init.BurstAccessMode = NOR_BURSTACCESS;
norHandle.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
norHandle.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
norHandle.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
norHandle.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
norHandle.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
norHandle.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
norHandle.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
norHandle.Init.WriteBurst = NOR_WRITEBURST;
/* NOR controller initialization */
NOR_MspInit();
if(HAL_NOR_Init(&norHandle, &Timing, &Timing) != HAL_OK)
{
return NOR_STATUS_ERROR;
}
else
{
return NOR_STATUS_OK;
}
}
/**
* @brief Reads an amount of data from the NOR device.
* @param uwStartAddress: Read start address
* @param pData: Pointer to data to be read
* @param uwDataSize: Size of data to read
* @retval NOR memory status
*/
uint8_t BSP_NOR_ReadData(uint32_t uwStartAddress, uint16_t* pData, uint32_t uwDataSize)
{
if(HAL_NOR_ReadBuffer(&norHandle, NOR_DEVICE_ADDR + uwStartAddress, pData, uwDataSize) != HAL_OK)
{
return NOR_STATUS_ERROR;
}
else
{
return NOR_STATUS_OK;
}
}
/**
* @brief Returns the NOR memory to read mode.
*/
void BSP_NOR_ReturnToReadMode(void)
{
HAL_NOR_ReturnToReadMode(&norHandle);
}
/**
* @brief Writes an amount of data to the NOR device.
* @param uwStartAddress: Write start address
* @param pData: Pointer to data to be written
* @param uwDataSize: Size of data to write
* @retval NOR memory status
*/
uint8_t BSP_NOR_WriteData(uint32_t uwStartAddress, uint16_t* pData, uint32_t uwDataSize)
{
uint32_t index = uwDataSize;
while(index > 0)
{
/* Write data to NOR */
HAL_NOR_Program(&norHandle, (uint32_t *)(NOR_DEVICE_ADDR + uwStartAddress), pData);
/* Read NOR device status */
if(HAL_NOR_GetStatus(&norHandle, NOR_DEVICE_ADDR, PROGRAM_TIMEOUT) != HAL_NOR_STATUS_SUCCESS)
{
return NOR_STATUS_ERROR;
}
/* Update the counters */
index--;
uwStartAddress += 2;
pData++;
}
return NOR_STATUS_OK;
}
/**
* @brief Programs an amount of data to the NOR device.
* @param uwStartAddress: Write start address
* @param pData: Pointer to data to be written
* @param uwDataSize: Size of data to write
* @retval NOR memory status
*/
uint8_t BSP_NOR_ProgramData(uint32_t uwStartAddress, uint16_t* pData, uint32_t uwDataSize)
{
/* Send NOR program buffer operation */
HAL_NOR_ProgramBuffer(&norHandle, uwStartAddress, pData, uwDataSize);
/* Return the NOR memory status */
if(HAL_NOR_GetStatus(&norHandle, NOR_DEVICE_ADDR, PROGRAM_TIMEOUT) != HAL_NOR_STATUS_SUCCESS)
{
return NOR_STATUS_ERROR;
}
else
{
return NOR_STATUS_OK;
}
}
/**
* @brief Erases the specified block of the NOR device.
* @param BlockAddress: Block address to erase
* @retval NOR memory status
*/
uint8_t BSP_NOR_Erase_Block(uint32_t BlockAddress)
{
/* Send NOR erase block operation */
HAL_NOR_Erase_Block(&norHandle, BlockAddress, NOR_DEVICE_ADDR);
/* Return the NOR memory status */
if(HAL_NOR_GetStatus(&norHandle, NOR_DEVICE_ADDR, BLOCKERASE_TIMEOUT) != HAL_NOR_STATUS_SUCCESS)
{
return NOR_STATUS_ERROR;
}
else
{
return NOR_STATUS_OK;
}
}
/**
* @brief Erases the entire NOR chip.
* @retval NOR memory status
*/
uint8_t BSP_NOR_Erase_Chip(void)
{
/* Send NOR Erase chip operation */
HAL_NOR_Erase_Chip(&norHandle, NOR_DEVICE_ADDR);
/* Return the NOR memory status */
if(HAL_NOR_GetStatus(&norHandle, NOR_DEVICE_ADDR, CHIPERASE_TIMEOUT) != HAL_NOR_STATUS_SUCCESS)
{
return NOR_STATUS_ERROR;
}
else
{
return NOR_STATUS_OK;
}
}
/**
* @brief Reads NOR flash IDs.
* @param pNOR_ID : Pointer to NOR ID structure
* @retval NOR memory status
*/
uint8_t BSP_NOR_Read_ID(NOR_IDTypeDef *pNOR_ID)
{
if(HAL_NOR_Read_ID(&norHandle, pNOR_ID) != HAL_OK)
{
return NOR_STATUS_ERROR;
}
else
{
return NOR_STATUS_OK;
}
}
/**
* @brief Initializes the NOR MSP.
*/
static void NOR_MspInit(void)
{
GPIO_InitTypeDef gpioinitstruct = {0};
/* Enable FSMC clock */
__HAL_RCC_FSMC_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 */
gpioinitstruct.Mode = GPIO_MODE_AF_PP;
gpioinitstruct.Pull = GPIO_PULLUP;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
/*-- GPIO Configuration ------------------------------------------------------*/
/*!< NOR Data lines configuration */
gpioinitstruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |
GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
gpioinitstruct.Pin = 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, &gpioinitstruct);
/*!< NOR Address lines configuration */
gpioinitstruct.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, &gpioinitstruct);
gpioinitstruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 |
GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5;
HAL_GPIO_Init(GPIOG, &gpioinitstruct);
gpioinitstruct.Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
gpioinitstruct.Pin = GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6;
HAL_GPIO_Init(GPIOE, &gpioinitstruct);
/*!< NOE and NWE configuration */
gpioinitstruct.Pin = GPIO_PIN_4 | GPIO_PIN_5;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
/*!< NE2 configuration */
gpioinitstruct.Pin = GPIO_PIN_9 | GPIO_PIN_12;
HAL_GPIO_Init(GPIOG, &gpioinitstruct);
/*!< Configure PD6 for NOR memory Ready/Busy signal */
gpioinitstruct.Pin = GPIO_PIN_6;
gpioinitstruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
}
/**
* @brief NOR BSP Wait for Ready/Busy signal.
* @param hnor: Pointer to NOR handle
* @param Timeout: Timeout duration
*/
void HAL_NOR_MspWait(NOR_HandleTypeDef *hnor, uint32_t Timeout)
{
uint32_t timeout = Timeout;
/* Polling on Ready/Busy signal */
while((HAL_GPIO_ReadPin(NOR_READY_BUSY_GPIO, NOR_READY_BUSY_PIN) != NOR_BUSY_STATE) && (timeout > 0))
{
timeout--;
}
timeout = Timeout;
/* Polling on Ready/Busy signal */
while((HAL_GPIO_ReadPin(NOR_READY_BUSY_GPIO, NOR_READY_BUSY_PIN) != NOR_READY_STATE) && (timeout > 0))
{
timeout--;
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,118 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_nor.h
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* the stm3210e_eval_nor.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210E_EVAL_NOR_H
#define __STM3210E_EVAL_NOR_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @addtogroup STM3210E_EVAL_NOR
* @{
*/
/* Exported constants --------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_NOR_Exported_Constants STM3210E EVAL NOR Exported Constants
* @{
*/
/**
* @brief NOR status structure definition
*/
#define NOR_STATUS_OK 0x00
#define NOR_STATUS_ERROR 0x01
#define NOR_DEVICE_ADDR ((uint32_t)0x64000000)
/* #define NOR_MEMORY_WIDTH FSMC_NORSRAM_MEM_BUS_WIDTH_8 */
#define NOR_MEMORY_WIDTH FSMC_NORSRAM_MEM_BUS_WIDTH_16
#define NOR_BURSTACCESS FSMC_BURST_ACCESS_MODE_DISABLE
/* #define NOR_BURSTACCESS FSMC_BURST_ACCESS_MODE_ENABLE*/
#define NOR_WRITEBURST FSMC_WRITE_BURST_DISABLE
/* #define NOR_WRITEBURST FSMC_WRITE_BURST_ENABLE */
/* NOR operations Timeout definitions */
#define BLOCKERASE_TIMEOUT ((uint32_t)0x00A00000) /* NOR block erase timeout */
#define CHIPERASE_TIMEOUT ((uint32_t)0x30000000) /* NOR chip erase timeout */
#define PROGRAM_TIMEOUT ((uint32_t)0x00004400) /* NOR program timeout */
/* NOR Ready/Busy signal GPIO definitions */
#define NOR_READY_BUSY_PIN GPIO_PIN_6
#define NOR_READY_BUSY_GPIO GPIOD
#define NOR_READY_STATE GPIO_PIN_SET
#define NOR_BUSY_STATE GPIO_PIN_RESET
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup STM3210E_EVAL_NOR_Exported_Functions
* @{
*/
uint8_t BSP_NOR_Init(void);
uint8_t BSP_NOR_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize);
uint8_t BSP_NOR_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize);
uint8_t BSP_NOR_ProgramData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize);
uint8_t BSP_NOR_Erase_Block(uint32_t BlockAddress);
uint8_t BSP_NOR_Erase_Chip(void);
uint8_t BSP_NOR_Read_ID(NOR_IDTypeDef *pNOR_ID);
void BSP_NOR_ReturnToReadMode(void);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210E_EVAL_NOR_H */

View File

@ -1,565 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_sd.c
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file includes the uSD card driver.
@verbatim
==============================================================================
##### How to use this driver #####
==============================================================================
(#) This driver is used to drive the micro SD external card mounted on STM3210E-EVAL
evaluation board.
(#) This driver does not need a specific component driver for the micro SD device
to be included with.
(#) Initialization steps:
(++) 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.
(++) To check the SD card presence you can use the function BSP_SD_IsDetected() which
returns the detection status
(++) 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().
(++) 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
(++) The micro SD card can be accessed with read/write block(s) operations once
it is ready for access. The access cand 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()
(++) 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.
(++) The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying
the number of blocks to erase.
(++) The SD runtime status is returned when calling the function BSP_SD_GetCardState().
[..]
@endverbatim
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 "stm3210e_eval_sd.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @defgroup STM3210E_EVAL_SD STM3210E EVAL SD
* @{
*/
/** @defgroup STM3210E_EVAL_SD_Private_Variables STM3210E EVAL SD Private Variables
* @{
*/
SD_HandleTypeDef uSdHandle;
/**
* @}
*/
/** @defgroup STM3210E_EVAL_SD_Private_Functions STM3210E EVAL SD Private Functions
* @{
*/
uint8_t SD_DMAConfigRx(SD_HandleTypeDef *hsd);
uint8_t SD_DMAConfigTx(SD_HandleTypeDef *hsd);
/**
* @}
*/
/** @defgroup STM3210E_EVAL_SD_Exported_Functions STM3210E EVAL SD Exported Functions
* @{
*/
/**
* @brief Initializes the SD card device.
* @retval SD status.
*/
uint8_t BSP_SD_Init(void)
{
uint8_t 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(NULL);
if(HAL_SD_Init(&uSdHandle) != HAL_OK)
{
state = MSD_ERROR;
}
/* Configure SD Bus width */
if(state == MSD_OK)
{
/* Enable wide operation */
if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK)
{
state = MSD_ERROR;
}
else
{
state = MSD_OK;
}
}
return state;
}
/**
* @brief Configures Interrupt mode for SD detection pin.
* @retval Returns 0
*/
uint8_t BSP_SD_ITConfig(void)
{
GPIO_InitTypeDef gpioinitstruct = {0};
/* Configure Interrupt mode for SD detection pin */
gpioinitstruct.Mode = GPIO_MODE_IT_RISING_FALLING;
gpioinitstruct.Pull = GPIO_PULLUP;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
gpioinitstruct.Pin = SD_DETECT_PIN;
HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpioinitstruct);
/* NVIC configuration for SDIO interrupts */
HAL_NVIC_SetPriority(SD_DETECT_IRQn, 0xE, 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)
{
uint8_t state = MSD_OK;
/* Invalidate the dma tx handle*/
uSdHandle.hdmatx = NULL;
/* Prepare the dma channel for a read operation */
state = ((SD_DMAConfigRx(&uSdHandle) == MSD_OK) ? MSD_OK : MSD_ERROR);
if(state == MSD_OK)
{
/* Read block(s) in DMA transfer mode */
state = ((HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) == HAL_OK) ? MSD_OK : MSD_ERROR);
}
return state;
}
/**
* @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)
{
uint8_t state = MSD_OK;
/* Invalidate the dma rx handle*/
uSdHandle.hdmarx = NULL;
/* Prepare the dma channel for a read operation */
state = ((SD_DMAConfigTx(&uSdHandle) == MSD_OK) ? MSD_OK : MSD_ERROR);
if(state == MSD_OK)
{
/* Write block(s) in DMA transfer mode */
state = ((HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) == HAL_OK) ? MSD_OK : MSD_ERROR);
}
return state;
}
/**
* @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 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);
}
/**
* @}
*/
/** @addtogroup STM3210E_EVAL_SD_Private_Functions
* @{
*/
/**
* @brief Initializes the SD MSP.
* @param Params : pointer on additional configuration parameters, can be NULL.
*/
__weak void BSP_SD_MspInit(void *Params)
{
GPIO_InitTypeDef gpioinitstruct = {0};
/* 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 */
gpioinitstruct.Mode = GPIO_MODE_AF_PP;
gpioinitstruct.Pull = GPIO_PULLUP;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
/* GPIOC configuration */
gpioinitstruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12;
HAL_GPIO_Init(GPIOC, &gpioinitstruct);
/* GPIOD configuration */
gpioinitstruct.Pin = GPIO_PIN_2;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
/* SD Card detect pin configuration */
gpioinitstruct.Mode = GPIO_MODE_INPUT;
gpioinitstruct.Pull = GPIO_PULLUP;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
gpioinitstruct.Pin = SD_DETECT_PIN;
HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpioinitstruct);
/* NVIC configuration for SDIO interrupts */
HAL_NVIC_SetPriority(SDIO_IRQn, 0xC, 0);
HAL_NVIC_EnableIRQ(SDIO_IRQn);
/* DMA initialization should be done here but , as there is only one channel for RX and TX it is configured and done directly when required*/
}
/**
* @brief SD_DMAConfigRx
* @par Function Description
* This function configure the DMA to receive data from the SD card
* @retval
* SD_ERROR or SD_OK
*/
uint8_t SD_DMAConfigRx(SD_HandleTypeDef *hsd)
{
static DMA_HandleTypeDef hdma_rx;
HAL_StatusTypeDef status = HAL_ERROR;
if(hsd->hdmarx == NULL)
{
/* Configure DMA Rx parameters */
hdma_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma_rx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
hdma_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
hdma_rx.Instance = SD_DMAx_Rx_INSTANCE;
/* Associate the DMA handle */
__HAL_LINKDMA(hsd, hdmarx, hdma_rx);
/* Stop any ongoing transfer and reset the state*/
HAL_DMA_Abort(&hdma_rx);
/* Deinitialize the Channel for new transfer */
HAL_DMA_DeInit(&hdma_rx);
/* Configure the DMA Channel */
status = HAL_DMA_Init(&hdma_rx);
/* NVIC configuration for DMA transfer complete interrupt */
HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0xD, 0);
HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn);
}
else
{
status = HAL_OK;
}
return (status != HAL_OK? MSD_ERROR : MSD_OK);
}
/**
* @brief SD_DMAConfigTx
* @par Function Description
* This function configure the DMA to transmit data to the SD card
* @retval
* SD_ERROR or SD_OK
*/
uint8_t SD_DMAConfigTx(SD_HandleTypeDef *hsd)
{
static DMA_HandleTypeDef hdma_tx;
HAL_StatusTypeDef status;
if(hsd->hdmatx == NULL)
{
/* Configure DMA Tx parameters */
hdma_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
hdma_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
hdma_tx.Instance = SD_DMAx_Tx_INSTANCE;
/* Associate the DMA handle */
__HAL_LINKDMA(hsd, hdmatx, hdma_tx);
/* Stop any ongoing transfer and reset the state*/
HAL_DMA_Abort(&hdma_tx);
/* Deinitialize the Channel for new transfer */
HAL_DMA_DeInit(&hdma_tx);
/* Configure the DMA Channel */
status = HAL_DMA_Init(&hdma_tx);
/* NVIC configuration for DMA transfer complete interrupt */
HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0xD, 0);
HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn);
}
else
{
status = HAL_OK;
}
return (status != HAL_OK? MSD_ERROR : MSD_OK);
}
/**
* @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,147 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_sd.c
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file includes the uSD card driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210E_EVAL_SD_H
#define __STM3210E_EVAL_SD_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @addtogroup STM3210E_EVAL_SD
* @{
*/
/* Exported types ------------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_SD_Exported_Types STM3210E EVAL SD Exported Types
* @{
*/
/**
* @brief SD Card information structure
*/
#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef
/**
* @brief SD status structure definition
*/
#define MSD_OK ((uint8_t)0x00)
#define MSD_ERROR ((uint8_t)0x01)
/**
* @}
*/
/* Exported constants --------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_SD_Exported_Constants STM3210E EVAL SD Exported Constants
* @{
*/
/**
* @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_11
#define SD_DETECT_GPIO_PORT GPIOF
#define __SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
#define SD_DETECT_IRQn EXTI15_10_IRQn
#define SD_DATATIMEOUT 100000000U
#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_INSTANCE DMA2_Channel4
#define SD_DMAx_Rx_INSTANCE DMA2_Channel4
#define SD_DMAx_Tx_IRQn DMA2_Channel4_5_IRQn
#define SD_DMAx_Rx_IRQn DMA2_Channel4_5_IRQn
#define BSP_SD_IRQHandler SDIO_IRQHandler
#define SD_DMAx_Tx_IRQHandler DMA2_Channel4_5_IRQHandler
#define SD_DMAx_Rx_IRQHandler DMA2_Channel4_5_IRQHandler
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup STM3210E_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
need to be changed for specific application needs */
void BSP_SD_MspInit(void *Params);
void BSP_SD_AbortCallback(void);
void BSP_SD_WriteCpltCallback(void);
void BSP_SD_ReadCpltCallback(void);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210E_EVAL_SD_H */

View File

@ -1,323 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_serialflash.c
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file provides a set of functions needed to manage the SPI M25Pxx
* FLASH memory mounted on STM3210E_EVAL board.
* It implements a high level communication layer for read and write
* from/to this memory. The needed STM32 hardware resources (SPI and
* GPIO) are defined in stm3210e_eval.h file, and the initialization is
* performed in FLASH_SPI_IO_Init() function declared in stm3210e_eval.c
* file.
* You can easily tailor this driver to any other development board,
* by just adapting the defines for hardware resources and
* FLASH_SPI_IO_Init() function.
*
* +---------------------------------------------------------------------+
* | Pin assignment |
* +---------------------------------------+---------------+-------------+
* | STM32 SPI Pins | BSP_FLASH | Pin |
* +---------------------------------------+---------------+-------------+
* | BSP_SERIAL_FLASH_CS_PIN | ChipSelect(/S)| 1 |
* | BSP_SERIAL_FLASH_SPI_MISO_PIN / MISO | DataOut(Q) | 2 |
* | | VCC | 3 (3.3 V)|
* | | GND | 4 (0 V) |
* | BSP_SERIAL_FLASH_SPI_MOSI_PIN / MOSI | DataIn(D) | 5 |
* | BSP_SERIAL_FLASH_SPI_SCK_PIN / SCLK | Clock(C) | 6 |
* | | VCC | 7 (3.3 V)|
* | | VCC | 8 (3.3 V)|
* +---------------------------------------+---------------+-------------+
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 "stm3210e_eval_serialflash.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @defgroup STM3210E_EVAL_SERIAL_FLASH STM3210E EVAL Serial FLASH
* @brief This file includes the M25Pxxx SPI FLASH driver of
* STM3210E-EVAL board.
* @{
*/
/** @defgroup STM3210E_EVAL_SERIAL_FLASH_Exported_Functions STM3210E EVAL SERIAL FLASH Exported Functions
* @{
*/
/**
* @brief Initializes peripherals used by the Serial FLASH device.
* @retval FLASH_OK (0x00) if operation is correctly performed, else
* return FLASH_ERROR (0x01).
*/
uint8_t BSP_SERIAL_FLASH_Init(void)
{
if(FLASH_SPI_IO_Init() != HAL_OK)
{
return FLASH_ERROR;
}
else
{
return FLASH_OK;
}
}
/**
* @brief Erases the specified FLASH sector.
* @param SectorAddr: address of the sector to erase.
* @retval FLASH_OK (0x00) if operation is correctly performed, else
* return FLASH_ERROR (0x01).
*/
uint8_t BSP_SERIAL_FLASH_EraseSector(uint32_t SectorAddr)
{
/*!< Sector Erase */
/*!< Select the FLASH and send "Write Enable" instruction */
FLASH_SPI_IO_WriteEnable();
/*!< Send Sector Erase instruction */
FLASH_SPI_IO_WriteByte(FLASH_SPI_CMD_SE);
/*!< Send SectorAddr high nibble address byte */
FLASH_SPI_IO_WriteByte((SectorAddr & 0xFF0000) >> 16);
/*!< Send SectorAddr medium nibble address byte */
FLASH_SPI_IO_WriteByte((SectorAddr & 0xFF00) >> 8);
/*!< Send SectorAddr low nibble address byte */
FLASH_SPI_IO_WriteByte(SectorAddr & 0xFF);
/*!< Wait the end of Flash writing and Deselect the FLASH*/
if(FLASH_SPI_IO_WaitForWriteEnd()!= HAL_OK)
{
return FLASH_ERROR;
}
else
{
return FLASH_OK;
}
}
/**
* @brief Erases the entire FLASH.
* @retval FLASH_OK (0x00) if operation is correctly performed, else
* return FLASH_ERROR (0x01).
*/
uint8_t BSP_SERIAL_FLASH_EraseBulk(void)
{
/*!< Bulk Erase */
/*!< Select the FLASH and send "Write Enable" instruction */
FLASH_SPI_IO_WriteEnable();
/*!< Send Bulk Erase instruction */
FLASH_SPI_IO_WriteByte(FLASH_SPI_CMD_BE);
/*!< Wait the end of Flash writing and Deselect the FLASH*/
if(FLASH_SPI_IO_WaitForWriteEnd()!= HAL_OK)
{
return FLASH_ERROR;
}
else
{
return FLASH_OK;
}
}
/**
* @brief Writes more than one byte to the FLASH with a single WRITE cycle
* (Page WRITE sequence).
* @note The number of byte can't exceed the FLASH page size (FLASH_SPI_PAGESIZE).
* @param pData: pointer to the buffer containing the data to be written
* to the FLASH.
* @param uwStartAddress: FLASH's internal address to write to.
* @param uwDataSize: number of bytes to write to the FLASH, must be equal
* or less than "FLASH_SPI_PAGESIZE" value.
* @retval FLASH_OK (0x00) if operation is correctly performed, else
* return FLASH_ERROR (0x01).
*/
uint8_t BSP_SERIAL_FLASH_WritePage(uint32_t uwStartAddress, uint8_t* pData, uint32_t uwDataSize)
{
/*!< Select the FLASH and send "Write Enable" instruction */
FLASH_SPI_IO_WriteEnable();
/*!< Send "Write to Memory " instruction */
FLASH_SPI_IO_WriteByte(FLASH_SPI_CMD_WRITE);
/*!< Send uwStartAddress high nibble address byte to write to */
FLASH_SPI_IO_WriteByte((uwStartAddress & 0xFF0000) >> 16);
/*!< Send uwStartAddress medium nibble address byte to write to */
FLASH_SPI_IO_WriteByte((uwStartAddress & 0xFF00) >> 8);
/*!< Send uwStartAddress low nibble address byte to write to */
FLASH_SPI_IO_WriteByte(uwStartAddress & 0xFF);
/*!< while there is data to be written on the FLASH */
while (uwDataSize--)
{
/*!< Send the current byte */
FLASH_SPI_IO_WriteByte(*pData);
/*!< Point on the next byte to be written */
pData++;
}
/*!< Wait the end of Flash writing */
if (FLASH_SPI_IO_WaitForWriteEnd()!= HAL_OK)
{
return FLASH_ERROR;
}
else
{
return FLASH_OK;
}
}
/**
* @brief Writes block of data to the FLASH. In this function, the number of
* WRITE cycles are reduced, using Page WRITE sequence.
* @param pData: pointer to the buffer containing the data to be written
* to the FLASH.
* @param uwStartAddress: FLASH's internal address to write to.
* @param uwDataSize: number of bytes to write to the FLASH.
* @retval FLASH_OK (0x00) if operation is correctly performed, else
* return FLASH_ERROR (0x01).
*/
uint8_t BSP_SERIAL_FLASH_WriteData(uint32_t uwStartAddress, uint8_t* pData, uint32_t uwDataSize)
{
uint8_t NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0, status = 0;
Addr = uwStartAddress % FLASH_SPI_PAGESIZE;
count = FLASH_SPI_PAGESIZE - Addr;
NumOfPage = uwDataSize / FLASH_SPI_PAGESIZE;
NumOfSingle = uwDataSize % FLASH_SPI_PAGESIZE;
if (Addr == 0) /*!< uwStartAddress is FLASH_SPI_PAGESIZE aligned */
{
if (NumOfPage == 0) /*!< uwDataSize < FLASH_SPI_PAGESIZE */
{
status = BSP_SERIAL_FLASH_WritePage(uwStartAddress, pData, uwDataSize);
}
else /*!< uwDataSize > FLASH_SPI_PAGESIZE */
{
while (NumOfPage--)
{
status = BSP_SERIAL_FLASH_WritePage(uwStartAddress, pData, FLASH_SPI_PAGESIZE);
uwStartAddress += FLASH_SPI_PAGESIZE;
pData += FLASH_SPI_PAGESIZE;
}
status = BSP_SERIAL_FLASH_WritePage(uwStartAddress, pData, NumOfSingle);
}
}
else /*!< uwStartAddress is not FLASH_SPI_PAGESIZE aligned */
{
if (NumOfPage == 0) /*!< uwDataSize < FLASH_SPI_PAGESIZE */
{
if (NumOfSingle > count) /*!< (uwDataSize + uwStartAddress) > FLASH_SPI_PAGESIZE */
{
temp = NumOfSingle - count;
status = BSP_SERIAL_FLASH_WritePage(uwStartAddress, pData, count);
uwStartAddress += count;
pData += count;
status = BSP_SERIAL_FLASH_WritePage(uwStartAddress, pData, temp);
}
else
{
status = BSP_SERIAL_FLASH_WritePage(uwStartAddress, pData, uwDataSize);
}
}
else /*!< uwDataSize > BSP_SERIAL_FLASH_PAGESIZE */
{
uwDataSize -= count;
NumOfPage = uwDataSize / FLASH_SPI_PAGESIZE;
NumOfSingle = uwDataSize % FLASH_SPI_PAGESIZE;
status = BSP_SERIAL_FLASH_WritePage(uwStartAddress, pData, count);
uwStartAddress += count;
pData += count;
while (NumOfPage--)
{
status = BSP_SERIAL_FLASH_WritePage(uwStartAddress, pData, FLASH_SPI_PAGESIZE);
uwStartAddress += FLASH_SPI_PAGESIZE;
pData += FLASH_SPI_PAGESIZE;
}
if (NumOfSingle != 0)
{
status = BSP_SERIAL_FLASH_WritePage(uwStartAddress, pData, NumOfSingle);
}
}
}
if (status!= HAL_OK)
{
return FLASH_ERROR;
}
else
{
return FLASH_OK;
}
}
/**
* @brief Reads a block of data from the FLASH.
* @param pData: pointer to the buffer that receives the data read from the FLASH.
* @param uwStartAddress: FLASH's internal address to read from.
* @param uwDataSize: number of bytes to read from the FLASH.
* @retval FLASH_OK (0x00) if operation is correctly performed, else
* return FLASH_ERROR (0x01).
*/
uint8_t BSP_SERIAL_FLASH_ReadData(uint32_t uwStartAddress, uint8_t* pData, uint32_t uwDataSize)
{
if(FLASH_SPI_IO_ReadData(uwStartAddress, pData, uwDataSize)!= HAL_OK)
{
return FLASH_ERROR;
}
else
{
return FLASH_OK;
}
}
/**
* @brief Reads FLASH identification.
* @retval FLASH identification
*/
uint32_t BSP_SERIAL_FLASH_ReadID(void)
{
return(FLASH_SPI_IO_ReadID());
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,94 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_serialflash.h
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* the stm3210e_eval_flash driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210E_EVAL_SERIAL_FLASH_H
#define __STM3210E_EVAL_SERIAL_FLASH_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm3210e_eval.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @addtogroup STM3210E_EVAL_SERIAL_FLASH
* @{
*/
/** @defgroup STM3210E_EVAL_SERIAL_FLASH_Exported_Constants STM3210E EVAL SERIAL FLASH Exported Constants
* @{
*/
#define FLASH_OK 0x00
#define FLASH_ERROR 0x01
/**
* @}
*/
/** @addtogroup STM3210E_EVAL_SERIAL_FLASH_Exported_Functions
* @{
*/
uint8_t BSP_SERIAL_FLASH_Init(void);
uint8_t BSP_SERIAL_FLASH_EraseSector(uint32_t SectorAddr);
uint8_t BSP_SERIAL_FLASH_EraseBulk(void);
uint8_t BSP_SERIAL_FLASH_WritePage(uint32_t uwStartAddress, uint8_t* pData, uint32_t uwDataSize);
uint8_t BSP_SERIAL_FLASH_WriteData(uint32_t uwStartAddress, uint8_t* pData, uint32_t uwDataSize);
uint8_t BSP_SERIAL_FLASH_ReadData( uint32_t uwStartAddress, uint8_t* pData, uint32_t uwDataSize);
uint32_t BSP_SERIAL_FLASH_ReadID(void);
/* Link function for EEPROM peripheral over SPI */
HAL_StatusTypeDef FLASH_SPI_IO_Init(void);
uint8_t FLASH_SPI_IO_WriteByte(uint8_t Data);
uint8_t FLASH_SPI_IO_ReadByte(void);
HAL_StatusTypeDef FLASH_SPI_IO_ReadData(uint32_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
void FLASH_SPI_IO_WriteEnable(void);
HAL_StatusTypeDef FLASH_SPI_IO_WaitForWriteEnd(void);
uint32_t FLASH_SPI_IO_ReadID(void);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM3210E_EVAL_SERIAL_FLASH_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,329 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_sram.c
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file includes the SRAM driver for the IS61WV51216BLL-10M memory
* device mounted on STM3210E-EVAL evaluation board.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 IS61WV51216BLL-10M SRAM external memory mounted
on STM3210E-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 "stm3210e_eval_sram.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @defgroup STM3210E_EVAL_SRAM STM3210E EVAL SRAM
* @{
*/
/* Private variables ---------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_SRAM_Private_Variables STM3210E EVAL SRAM Private Variables
* @{
*/
SRAM_HandleTypeDef sramHandle;
static FSMC_NORSRAM_TimingTypeDef Timing;
/**
* @}
*/
/* Private function prototypes -----------------------------------------------*/
/** @defgroup STM3210E_EVAL_SRAM_Private_Function_Prototypes STM3210E EVAL SRAM Private Function Prototypes
* @{
*/
/**
* @}
*/
/* Private functions ---------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_SRAM_Exported_Functions STM3210E EVAL SRAM Exported 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_BANK3;
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.
* @retval None
*/
void BSP_SRAM_DMA_IRQHandler(void)
{
HAL_DMA_IRQHandler(sramHandle.hdma);
}
/**
* @brief Initializes SRAM MSP.
* @retval None
*/
__weak void BSP_SRAM_MspInit(void)
{
static DMA_HandleTypeDef hdma1;
GPIO_InitTypeDef gpioinitstruct = {0};
/* Enable FSMC clock */
__HAL_RCC_FSMC_CLK_ENABLE();
/* Enable DMA1 and DMA2 clocks */
__HAL_RCC_DMA1_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 */
gpioinitstruct.Mode = GPIO_MODE_AF_PP;
gpioinitstruct.Pull = GPIO_NOPULL;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
/*-- GPIO Configuration ------------------------------------------------------*/
/*!< SRAM Data lines configuration */
gpioinitstruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |
GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
gpioinitstruct.Pin = 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, &gpioinitstruct);
/*!< SRAM Address lines configuration */
gpioinitstruct.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, &gpioinitstruct);
gpioinitstruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5;
HAL_GPIO_Init(GPIOG, &gpioinitstruct);
gpioinitstruct.Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
/*!< NOE and NWE configuration */
gpioinitstruct.Pin = GPIO_PIN_4 |GPIO_PIN_5;
HAL_GPIO_Init(GPIOD, &gpioinitstruct);
/*!< NE3 configuration */
gpioinitstruct.Pin = GPIO_PIN_10 |GPIO_PIN_12;
HAL_GPIO_Init(GPIOG, &gpioinitstruct);
/*!< NBL0, NBL1 configuration */
gpioinitstruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
HAL_GPIO_Init(GPIOE, &gpioinitstruct);
/* Configure common DMA parameters */
hdma1.Init.Direction = DMA_MEMORY_TO_MEMORY;
hdma1.Init.PeriphInc = DMA_PINC_ENABLE;
hdma1.Init.MemInc = DMA_MINC_ENABLE;
hdma1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma1.Init.Mode = DMA_NORMAL;
hdma1.Init.Priority = DMA_PRIORITY_HIGH;
hdma1.Instance = DMA1_Channel1;
/* Deinitialize the Stream for new transfer */
HAL_DMA_DeInit(&hdma1);
/* Configure the DMA Stream */
HAL_DMA_Init(&hdma1);
/* Associate the DMA handle to the FSMC SRAM one */
sramHandle.hdma = &hdma1;
/* NVIC configuration for DMA transfer complete interrupt */
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0xC, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,113 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_sram.h
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file contains the common defines and functions prototypes for
* the stm3210e_eval_sram.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210E_EVAL_SRAM_H
#define __STM3210E_EVAL_SRAM_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @addtogroup STM3210E_EVAL_SRAM
* @{
*/
/* Exported constants --------------------------------------------------------*/
/** @defgroup STM3210E_EVAL_SRAM_Exported_Constants STM3210E EVAL SRAM Exported Constants
* @{
*/
/**
* @brief SRAM status structure definition
*/
#define SRAM_OK 0x00
#define SRAM_ERROR 0x01
#define SRAM_DEVICE_ADDR ((uint32_t)0x68000000)
#define SRAM_DEVICE_SIZE ((uint32_t)0x200000) /* SRAM device size in MBytes */
/* #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_STREAM DMA2_Channel1
#define SRAM_DMAx_IRQn DMA2_Channel1_IRQn
#define SRAM_DMAx_IRQHandler DMA2_Channel1_IRQHandler
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup STM3210E_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 /* __STM3210E_EVAL_SRAM_H */

View File

@ -1,166 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_tsensor.c
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file provides a set of functions needed to manage the I2C STLM75
* temperature sensor mounted on STM3210E_EVAL board .
* It implements a high level communication layer for read and write
* from/to this sensor. The needed STM32L152xD hardware resources (I2C and
* GPIO) are defined in stm3210e_eval.h file, and the initialization is
* performed in TSENSOR_IO_Init() function declared in stm3210e_eval.c
* file.
* You can easily tailor this driver to any other development board,
* by just adapting the defines for hardware resources and
* TSENSOR_IO_Init() function.
*
* +--------------------------------------------------------------------+
* | Pin assignment |
* +----------------------------------------+--------------+------------+
* | STM3210E I2C Pins | STLM75 | Pin |
* +----------------------------------------+--------------+------------+
* | EVAL_I2C2_SDA_PIN | SDA | 1 |
* | EVAL_I2C2_SCL_PIN | SCL | 2 |
* | EVAL_I2C2_SMBUS_PIN | OS/INT | 3 |
* | . | GND | 4 (0V) |
* | . | A2 | 5 |
* | . | A1 | 6 |
* | . | A0 | 7 |
* | . | VDD | 8 (3.3V)|
* +----------------------------------------+--------------+------------+
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 "stm3210e_eval_tsensor.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @defgroup STM3210E_EVAL_TSENSOR STM3210E EVAL TSENSOR
* @brief This file includes the STLM75 Temperature Sensor driver of
* STM3210E_EVAL board.
* @{
*/
/** @defgroup STM3210E_EVAL_TSENSOR_Private_Variables STM3210E EVAL TSENSOR Private Variables
* @{
*/
static TSENSOR_DrvTypeDef *tsensor_drv;
__IO uint16_t TSENSORAddress = 0;
/**
* @}
*/
/** @defgroup STM3210E_EVAL_I2C_TSENSOR_Exported_Functions STM3210E EVAL I2C TSENSOR Exported Functions
* @{
*/
/**
* @brief Initializes peripherals used by the I2C Temperature Sensor driver.
* @retval TSENSOR status
*/
uint32_t BSP_TSENSOR_Init(void)
{
uint8_t ret = TSENSOR_ERROR;
TSENSOR_InitTypeDef tsensor_initstruct = {0};
/* Temperature Sensor Initialization */
if(Stlm75Drv.IsReady(TSENSOR_I2C_ADDRESS_A01, TSENSOR_MAX_TRIALS) == HAL_OK)
{
/* Initialize the temperature sensor driver structure */
TSENSORAddress = TSENSOR_I2C_ADDRESS_A01;
tsensor_drv = &Stlm75Drv;
ret = TSENSOR_OK;
}
else
{
if(Stlm75Drv.IsReady(TSENSOR_I2C_ADDRESS_A02, TSENSOR_MAX_TRIALS) == HAL_OK)
{
/* Initialize the temperature sensor driver structure */
TSENSORAddress = TSENSOR_I2C_ADDRESS_A02;
tsensor_drv = &Stlm75Drv;
ret = TSENSOR_OK;
}
else
{
ret = TSENSOR_ERROR;
}
}
if (ret == TSENSOR_OK)
{
/* Configure Temperature Sensor : Conversion 9 bits in continuous mode */
/* Alert outside range Limit Temperature 12° <-> 24°c */
tsensor_initstruct.AlertMode = STLM75_INTERRUPT_MODE;
tsensor_initstruct.ConversionMode = STLM75_CONTINUOUS_MODE;
tsensor_initstruct.TemperatureLimitHigh = 24;
tsensor_initstruct.TemperatureLimitLow = 12;
/* TSENSOR Init */
tsensor_drv->Init(TSENSORAddress, &tsensor_initstruct);
ret = TSENSOR_OK;
}
return ret;
}
/**
* @brief Returns the Temperature Sensor status.
* @retval The Temperature Sensor status.
*/
uint8_t BSP_TSENSOR_ReadStatus(void)
{
return (tsensor_drv->ReadStatus(TSENSORAddress));
}
/**
* @brief Read Temperature register of STLM75.
* @retval STLM75 measured temperature value.
*/
uint16_t BSP_TSENSOR_ReadTemp(void)
{
return tsensor_drv->ReadTemp(TSENSORAddress);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,104 +0,0 @@
/**
******************************************************************************
* @file stm3210e_eval_tsensor.h
* @author MCD Application Team
* @version V7.0.0
* @date 14-April-2017
* @brief This file contains all the functions prototypes for the
* stm3210e_tsensor.c firmware driver.
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM3210E_EVAL_TSENSOR_H
#define __STM3210E_EVAL_TSENSOR_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm3210e_eval.h"
#include "../Components/stlm75/stlm75.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM3210E_EVAL
* @{
*/
/** @addtogroup STM3210E_EVAL_TSENSOR
* @{
*/
/** @defgroup STM3210E_EVAL_TSENSOR_Exported_Types STM3210E EVAL TSENSOR Exported Types
* @{
*/
/**
* @brief TSENSOR Status
*/
typedef enum
{
TSENSOR_OK = 0,
TSENSOR_ERROR
}TSENSOR_Status_TypDef;
/**
* @}
*/
/** @defgroup STM3210E_EVAL_TSENSOR_Exported_Constants STM3210E EVAL TSENSOR Exported Constants
* @{
*/
/* Temperature Sensor hardware I2C address */
#define TSENSOR_I2C_ADDRESS_A01 0x90
#define TSENSOR_I2C_ADDRESS_A02 0x92
/* Maximum number of trials use for STLM75_IsReady function */
#define TSENSOR_MAX_TRIALS 50
/**
* @}
*/
/** @addtogroup STM3210E_EVAL_I2C_TSENSOR_Exported_Functions
* @{
*/
uint32_t BSP_TSENSOR_Init(void);
uint8_t BSP_TSENSOR_ReadStatus(void);
uint16_t BSP_TSENSOR_ReadTemp(void);
#ifdef __cplusplus
}
#endif
#endif /* __STM3210E_EVAL_TSENSOR_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

@ -0,0 +1 @@
Subproject commit 7cf1eeded2cf3c8c441b685bb60f696544ba285a

View File

@ -1,27 +0,0 @@
Copyright 2016 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 STM32F1XX-NUCLEO Component
![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32f1xx-nucleo.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 **stm32f1xx-nucleo** MCU component repository is one element of the **STM32CubeF1** MCU embedded software package, providing the **STM32F1XX-NUCLEO** 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/stm32f1xx-nucleo/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/STM32CubeF1/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,98 +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 STM32F1xx_Nucleo 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-stm32f1xx_nucleo-board-drivers"><small>Release Notes for</small> <mark>STM32F1xx_Nucleo 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 STM32F1xx Nucleo 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-section6" checked aria-hidden="true"> <label for="collapse-section6" aria-hidden="true">V1.0.5 / 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-section5" aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V1.0.4 / 14-April-2017</label>
<div>
<h2 id="main-changes-1">Main Changes</h2>
<ul>
<li>Add STM32F1xx_Nucleo_BSP_User_Manual.chm file</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true">V1.0.3 / 29-April-2016</label>
<div>
<h2 id="main-changes-2">Main Changes</h2>
<ul>
<li>Add support for 4 Gb sd cards.</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 / 18-December-2015</label>
<div>
<h2 id="main-changes-3">Main Changes</h2>
<ul>
<li>Add an alias from BUTTON_KEY to BUTTON_USER for compatibility with STM32F4xx and STM32L0xx.</li>
<li>BSP_LED_Init: Configure the led in GPIO_NOPULL instead of GPIO_PULLUP to reduce power consumption.</li>
<li>Rename GPIO_SPEED_HIGH to GPIO_SPEED_FREQ_HIGH for compatibility with STM32F1xx HAL Drivers V1.0.2.</li>
<li>Rename GPIO_SPEED_MEDIUM to GPIO_SPEED_FREQ_MEDIUM for compatibility with STM32F1xx HAL Drivers V1.0.2.</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 / 31-July-2015</label>
<div>
<h2 id="main-changes-4">Main Changes</h2>
<ul>
<li>Add ADC calibration for JoyStick management.</li>
<li>Improve the polling of ADC in BSP_JOY_GetState.</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 / 05-December-2014</label>
<div>
<h2 id="main-changes-5">Main Changes</h2>
<ul>
<li>Official release for STM32F1xx_Nucleo board RevC drivers for STM32Cube_FW_F1 project.</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,873 +0,0 @@
/**
******************************************************************************
* @file stm32f1xx_nucleo.c
* @author MCD Application Team
* @version V1.0.4
* @date 14-April-2017
* @brief This file provides set of firmware functions to manage:
* - LEDs and push-button available on STM32F1XX-Nucleo Kit
* from STMicroelectronics
* - LCD, joystick and microSD available on Adafruit 1.8" TFT LCD
* shield (reference ID 802)
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 "stm32f1xx_nucleo.h"
/** @addtogroup BSP
* @{
*/
/** @defgroup STM32F1XX_NUCLEO STM32F103RB Nucleo
* @brief This file provides set of firmware functions to manage Leds and push-button
* available on STM32F1XX-Nucleo Kit from STMicroelectronics.
* It provides also LCD, joystick and uSD functions to communicate with
* Adafruit 1.8" TFT LCD shield (reference ID 802)
* @{
*/
/** @defgroup STM32F1XX_NUCLEO_Private_Defines STM32F1XX NUCLEO Private Defines
* @{
*/
/**
* @brief STM32F103RB NUCLEO BSP Driver version
*/
#define __STM32F1XX_NUCLEO_BSP_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F1XX_NUCLEO_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */
#define __STM32F1XX_NUCLEO_BSP_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
#define __STM32F1XX_NUCLEO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F1XX_NUCLEO_BSP_VERSION ((__STM32F1XX_NUCLEO_BSP_VERSION_MAIN << 24)\
|(__STM32F1XX_NUCLEO_BSP_VERSION_SUB1 << 16)\
|(__STM32F1XX_NUCLEO_BSP_VERSION_SUB2 << 8 )\
|(__STM32F1XX_NUCLEO_BSP_VERSION_RC))
/**
* @brief LINK SD Card
*/
#define SD_DUMMY_BYTE 0xFF
#define SD_NO_RESPONSE_EXPECTED 0x80
/**
* @}
*/
/** @defgroup STM32F1XX_NUCLEO_Private_Variables STM32F1XX NUCLEO Private Variables
* @{
*/
GPIO_TypeDef* LED_PORT[LEDn] = {LED2_GPIO_PORT};
const uint16_t LED_PIN[LEDn] = {LED2_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 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 */
/**
* @}
*/
/** @defgroup STM32F1XX_NUCLEO_Private_Functions STM32F1XX NUCLEO Private Functions
* @{
*/
#ifdef HAL_SPI_MODULE_ENABLED
static void SPIx_Init(void);
static void SPIx_Write(uint8_t Value);
static void SPIx_WriteData(uint8_t *DataIn, uint16_t DataLength);
static void SPIx_WriteReadData(const uint8_t *DataIn, uint8_t *DataOut, uint16_t DataLegnth);
static void SPIx_Error (void);
static void SPIx_MspInit(void);
/* 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);
void SD_IO_ReadData(uint8_t *DataOut, uint16_t DataLength);
void SD_IO_WriteData(const uint8_t *Data, uint16_t DataLength);
uint8_t SD_IO_WriteByte(uint8_t Data);
uint8_t SD_IO_ReadByte(void);
/* 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 HAL_StatusTypeDef 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 */
/**
* @}
*/
/** @defgroup STM32F1XX_NUCLEO_Exported_Functions STM32F1XX NUCLEO Exported Functions
* @{
*/
/**
* @brief This method returns the STM32F1XX NUCLEO BSP Driver revision
* @retval version : 0xXYZR (8bits for each decimal, R for RC)
*/
uint32_t BSP_GetVersion(void)
{
return __STM32F1XX_NUCLEO_BSP_VERSION;
}
/** @defgroup STM32F1XX_NUCLEO_LED_Functions STM32F1XX NUCLEO LED Functions
* @{
*/
/**
* @brief Configures LED GPIO.
* @param Led: Led to be configured.
* This parameter can be one of the following values:
* @arg LED2
*/
void BSP_LED_Init(Led_TypeDef Led)
{
GPIO_InitTypeDef gpioinitstruct;
/* Enable the GPIO_LED Clock */
LEDx_GPIO_CLK_ENABLE(Led);
/* Configure the GPIO_LED pin */
gpioinitstruct.Pin = LED_PIN[Led];
gpioinitstruct.Mode = GPIO_MODE_OUTPUT_PP;
gpioinitstruct.Pull = GPIO_NOPULL;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(LED_PORT[Led], &gpioinitstruct);
/* Reset PIN to switch off the LED */
HAL_GPIO_WritePin(LED_PORT[Led],LED_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 LED2
* @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(LED_PORT[Led],LED_PIN[Led], GPIO_PIN_RESET);
/* DeInit the GPIO_LED pin */
gpio_init_structure.Pin = LED_PIN[Led];
HAL_GPIO_DeInit(LED_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(LED_PORT[Led], LED_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 LED2
*/
void BSP_LED_Off(Led_TypeDef Led)
{
HAL_GPIO_WritePin(LED_PORT[Led], LED_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 LED2
*/
void BSP_LED_Toggle(Led_TypeDef Led)
{
HAL_GPIO_TogglePin(LED_PORT[Led], LED_PIN[Led]);
}
/**
* @}
*/
/** @defgroup STM32F1XX_NUCLEO_BUTTON_Functions STM32F1XX NUCLEO BUTTON Functions
* @{
*/
/**
* @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 gpioinitstruct;
/* Enable the BUTTON Clock */
BUTTONx_GPIO_CLK_ENABLE(Button);
gpioinitstruct.Pin = BUTTON_PIN[Button];
gpioinitstruct.Pull = GPIO_NOPULL;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
if (ButtonMode == BUTTON_MODE_GPIO)
{
/* Configure Button pin as input */
gpioinitstruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(BUTTON_PORT[Button], &gpioinitstruct);
}
if (ButtonMode == BUTTON_MODE_EXTI)
{
/* Configure Button pin as input with External interrupt */
gpioinitstruct.Mode = GPIO_MODE_IT_FALLING;
HAL_GPIO_Init(BUTTON_PORT[Button], &gpioinitstruct);
/* Enable and set Button EXTI Interrupt to the lowest priority */
HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0);
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 Button state.
*/
uint32_t BSP_PB_GetState(Button_TypeDef Button)
{
return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
}
/**
* @}
*/
/**
* @}
*/
/** @addtogroup STM32F1XX_NUCLEO_Private_Functions
* @{
*/
#ifdef HAL_SPI_MODULE_ENABLED
/******************************************************************************
BUS OPERATIONS
*******************************************************************************/
/**
* @brief Initialize SPI MSP.
*/
static void SPIx_MspInit(void)
{
GPIO_InitTypeDef gpioinitstruct = {0};
/*** Configure the GPIOs ***/
/* Enable GPIO clock */
NUCLEO_SPIx_SCK_GPIO_CLK_ENABLE();
NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_ENABLE();
/* Configure SPI SCK */
gpioinitstruct.Pin = NUCLEO_SPIx_SCK_PIN;
gpioinitstruct.Mode = GPIO_MODE_AF_PP;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(NUCLEO_SPIx_SCK_GPIO_PORT, &gpioinitstruct);
/* Configure SPI MISO and MOSI */
gpioinitstruct.Pin = NUCLEO_SPIx_MOSI_PIN;
HAL_GPIO_Init(NUCLEO_SPIx_MISO_MOSI_GPIO_PORT, &gpioinitstruct);
gpioinitstruct.Pin = NUCLEO_SPIx_MISO_PIN;
gpioinitstruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(NUCLEO_SPIx_MISO_MOSI_GPIO_PORT, &gpioinitstruct);
/*** Configure the SPI peripheral ***/
/* Enable SPI clock */
NUCLEO_SPIx_CLK_ENABLE();
}
/**
* @brief Initialize 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 baudrate is set to 8 MHz maximum (PCLK2/SPI_BaudRatePrescaler = 64/8 = 8 MHz)
to verify these 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
- PCLK2 max frequency is 32 MHz
*/
hnucleo_Spi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
hnucleo_Spi.Init.Direction = SPI_DIRECTION_2LINES;
hnucleo_Spi.Init.CLKPhase = SPI_PHASE_1EDGE;
hnucleo_Spi.Init.CLKPolarity = SPI_POLARITY_LOW;
hnucleo_Spi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
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_DISABLE;
hnucleo_Spi.Init.Mode = SPI_MODE_MASTER;
SPIx_MspInit();
HAL_SPI_Init(&hnucleo_Spi);
}
}
/**
* @brief SPI Write a byte to device
* @param Value: value to be written
*/
static void SPIx_WriteReadData(const uint8_t *DataIn, uint8_t *DataOut, uint16_t DataLength)
{
HAL_StatusTypeDef status = HAL_OK;
status = HAL_SPI_TransmitReceive(&hnucleo_Spi, (uint8_t*) DataIn, DataOut, DataLength, SpixTimeout);
/* Check the communication status */
if(status != HAL_OK)
{
/* Execute user timeout callback */
SPIx_Error();
}
}
/**
* @brief SPI Write an amount of data to device
* @param Value: value to be written
* @param DataLength: number of bytes to write
*/
static void SPIx_WriteData(uint8_t *DataIn, uint16_t DataLength)
{
HAL_StatusTypeDef status = HAL_OK;
status = HAL_SPI_Transmit(&hnucleo_Spi, DataIn, DataLength, 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 Initialize the SD Card and put it into StandBy State (Ready for
* data transfer).
*/
void SD_IO_Init(void)
{
GPIO_InitTypeDef gpioinitstruct = {0};
uint8_t counter = 0;
/* SD_CS_GPIO Periph clock enable */
SD_CS_GPIO_CLK_ENABLE();
/* Configure SD_CS_PIN pin: SD Card CS pin */
gpioinitstruct.Pin = SD_CS_PIN;
gpioinitstruct.Mode = GPIO_MODE_OUTPUT_PP;
gpioinitstruct.Pull = GPIO_PULLUP;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(SD_CS_GPIO_PORT, &gpioinitstruct);
/* Configure LCD_CS_PIN pin: LCD Card CS pin */
gpioinitstruct.Pin = LCD_CS_PIN;
gpioinitstruct.Mode = GPIO_MODE_OUTPUT_PP;
gpioinitstruct.Pull = GPIO_NOPULL;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(SD_CS_GPIO_PORT, &gpioinitstruct);
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 pin value.
*/
void SD_IO_CSState(uint8_t val)
{
if(val == 1)
{
SD_CS_HIGH();
}
else
{
SD_CS_LOW();
}
}
/**
* @brief Write byte(s) on the SD
* @param DataIn: Pointer to data buffer to write
* @param DataOut: Pointer to data buffer for read data
* @param DataLength: number of bytes to write
*/
void SD_IO_WriteReadData(const uint8_t *DataIn, uint8_t *DataOut, uint16_t DataLength)
{
/* Send the byte */
SPIx_WriteReadData(DataIn, DataOut, DataLength);
}
/**
* @brief Write a byte on the SD.
* @param Data: byte to send.
* @retval Data written
*/
uint8_t SD_IO_WriteByte(uint8_t Data)
{
uint8_t tmp;
/* Send the byte */
SPIx_WriteReadData(&Data,&tmp,1);
return tmp;
}
/**
* @brief Write an amount of data on the SD.
* @param Data: byte to send.
* @param DataLength: number of bytes to write
*/
void SD_IO_ReadData(uint8_t *DataOut, uint16_t DataLength)
{
/* Send the byte */
SD_IO_WriteReadData(DataOut, DataOut, DataLength);
}
/**
* @brief Write an amount of data on the SD.
* @param Data: byte to send.
* @param DataLength: number of bytes to write
*/
void SD_IO_WriteData(const uint8_t *Data, uint16_t DataLength)
{
/* Send the byte */
SPIx_WriteData((uint8_t *)Data, DataLength);
}
/********************************* LINK LCD ***********************************/
/**
* @brief Initialize the LCD
*/
void LCD_IO_Init(void)
{
GPIO_InitTypeDef gpioinitstruct;
/* 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 */
gpioinitstruct.Pin = LCD_CS_PIN;
gpioinitstruct.Mode = GPIO_MODE_OUTPUT_PP;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(SD_CS_GPIO_PORT, &gpioinitstruct);
/* Configure LCD_DC_PIN pin: LCD Card DC pin */
gpioinitstruct.Pin = LCD_DC_PIN;
HAL_GPIO_Init(LCD_DC_GPIO_PORT, &gpioinitstruct);
/* LCD chip select high */
LCD_CS_HIGH();
/* LCD SPI Config */
SPIx_Init();
}
/**
* @brief Write command to select the LCD register.
* @param LCDReg: Address of the selected register.
* @retval None
*/
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 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;
/* 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)
{
}
}
/* Deselect : Chip Select high */
LCD_CS_HIGH();
}
/**
* @brief Wait for loop in ms.
* @param Delay in ms.
* @retval None
*/
void LCD_Delay(uint32_t Delay)
{
HAL_Delay(Delay);
}
#endif /* HAL_SPI_MODULE_ENABLED */
#ifdef HAL_ADC_MODULE_ENABLED
/******************************* LINK JOYSTICK ********************************/
/**
* @brief Initialize ADC MSP.
*/
static void ADCx_MspInit(ADC_HandleTypeDef *hadc)
{
GPIO_InitTypeDef gpioinitstruct;
/*** Configure the GPIOs ***/
/* Enable GPIO clock */
NUCLEO_ADCx_GPIO_CLK_ENABLE();
/* Configure ADC1 Channel8 as analog input */
gpioinitstruct.Pin = NUCLEO_ADCx_GPIO_PIN ;
gpioinitstruct.Mode = GPIO_MODE_ANALOG;
gpioinitstruct.Pull = GPIO_NOPULL;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
HAL_GPIO_Init(NUCLEO_ADCx_GPIO_PORT, &gpioinitstruct);
/*** 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 gpioinitstruct;
/*** DeInit the ADC peripheral ***/
/* Disable ADC clock */
NUCLEO_ADCx_CLK_DISABLE();
/* Configure the selected ADC Channel as analog input */
gpioinitstruct.Pin = NUCLEO_ADCx_GPIO_PIN ;
HAL_GPIO_DeInit(NUCLEO_ADCx_GPIO_PORT, gpioinitstruct.Pin);
/* Disable GPIO clock has to be done by the application*/
/* NUCLEO_ADCx_GPIO_CLK_DISABLE(); */
}
/**
* @brief Initializes ADC HAL.
*/
static HAL_StatusTypeDef ADCx_Init(void)
{
/* Set ADC instance */
hnucleo_Adc.Instance = NUCLEO_ADCx;
if(HAL_ADC_GetState(&hnucleo_Adc) == HAL_ADC_STATE_RESET)
{
/* ADC Config */
hnucleo_Adc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hnucleo_Adc.Init.ScanConvMode = ADC_SCAN_DISABLE;
hnucleo_Adc.Init.ContinuousConvMode = DISABLE;
hnucleo_Adc.Init.NbrOfConversion = 1;
hnucleo_Adc.Init.DiscontinuousConvMode = DISABLE;
hnucleo_Adc.Init.NbrOfDiscConversion = 1;
hnucleo_Adc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
/* Initialize MSP related to ADC */
ADCx_MspInit(&hnucleo_Adc);
/* Initialize ADC */
if (HAL_ADC_Init(&hnucleo_Adc) != HAL_OK)
{
return HAL_ERROR;
}
/* Run ADC calibration */
if (HAL_ADCEx_Calibration_Start(&hnucleo_Adc) != HAL_OK)
{
return HAL_ERROR;
}
}
return HAL_OK;
}
/**
* @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)
{
if (ADCx_Init() != HAL_OK)
{
return (uint8_t) HAL_ERROR;
}
/* Select Channel 8 to be converted */
sConfig.Channel = ADC_CHANNEL_8;
sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
sConfig.Rank = 1;
/* Return Joystick initialization status */
return (uint8_t)HAL_ADC_ConfigChannel(&hnucleo_Adc, &sConfig);
}
/**
* @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 = JOY_NONE;
uint16_t keyconvertedvalue = 0;
/* Start the conversion process */
HAL_ADC_Start(&hnucleo_Adc);
/* Wait for the end of conversion */
if (HAL_ADC_PollForConversion(&hnucleo_Adc, 10) != HAL_TIMEOUT)
{
/* Get the converted value of regular channel */
keyconvertedvalue = HAL_ADC_GetValue(&hnucleo_Adc);
}
if((keyconvertedvalue > 1800) && (keyconvertedvalue < 2090))
{
state = JOY_UP;
}
else if((keyconvertedvalue > 500) && (keyconvertedvalue < 780))
{
state = JOY_RIGHT;
}
else if((keyconvertedvalue > 1200) && (keyconvertedvalue < 1350))
{
state = JOY_SEL;
}
else if((keyconvertedvalue > 10) && (keyconvertedvalue < 130))
{
state = JOY_DOWN;
}
else if((keyconvertedvalue > 3500) && (keyconvertedvalue < 3760))
{
state = JOY_LEFT;
}
else
{
state = JOY_NONE;
}
/* Return the code of the Joystick key pressed*/
return state;
}
#endif /* HAL_ADC_MODULE_ENABLED */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,275 +0,0 @@
/**
******************************************************************************
* @file stm32f1xx_nucleo.h
* @author MCD Application Team
* @version V1.0.4
* @date 14-April-2017
* @brief This file contains definitions for:
* - LEDs and push-button available on STM32F1XX-Nucleo Kit
* from STMicroelectronics
* - LCD, joystick and microSD available on Adafruit 1.8" TFT LCD
* shield (reference ID 802)
******************************************************************************
* @attention
*
* Copyright (c) 2016 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 __STM32F1XX_NUCLEO_H
#define __STM32F1XX_NUCLEO_H
#ifdef __cplusplus
extern "C" {
#endif
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM32F1XX_NUCLEO
* @{
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
/** @defgroup STM32F1XX_NUCLEO_Exported_Types STM32F1XX NUCLEO Exported Types
* @{
*/
typedef enum
{
LED2 = 0,
LED_GREEN = LED2
} 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 STM32F1XX_NUCLEO_Exported_Constants STM32F1XX NUCLEO Exported Constants
* @{
*/
/**
* @brief Define for STM32F1xx_NUCLEO board
*/
#if !defined (USE_STM32F1xx_NUCLEO)
#define USE_STM32F1xx_NUCLEO
#endif
/** @defgroup STM32F1XX_NUCLEO_LED STM32F1XX NUCLEO LED
* @{
*/
#define LEDn 1
#define LED2_PIN GPIO_PIN_5
#define LED2_GPIO_PORT GPIOA
#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == 0) LED2_GPIO_CLK_ENABLE();} while(0)
#define LEDx_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? LED2_GPIO_CLK_DISABLE() : 0)
/**
* @}
*/
/** @defgroup STM32F1XX_NUCLEO_BUTTON STM32F1XX NUCLEO BUTTON
* @{
*/
#define BUTTONn 1
/**
* @brief User 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_IRQn EXTI15_10_IRQn
/* 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_IRQn USER_BUTTON_EXTI_IRQn
#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == 0) USER_BUTTON_GPIO_CLK_ENABLE();} while(0)
#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? USER_BUTTON_GPIO_CLK_DISABLE() : 0)
/**
* @}
*/
/** @addtogroup STM32F1XX_NUCLEO_BUS STM32F1XX NUCLEO BUS
* @{
*/
/*###################### SPI1 ###################################*/
#define NUCLEO_SPIx SPI1
#define NUCLEO_SPIx_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE()
#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_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 timeouts 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
/**
* @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_5
#define SD_CS_GPIO_PORT GPIOB
#define SD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define SD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
/**
* @brief LCD Control Interface pins (shield D10)
*/
#define LCD_CS_PIN GPIO_PIN_6
#define LCD_CS_GPIO_PORT GPIOB
#define LCD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define LCD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
/**
* @brief LCD Data/Command Interface pins
*/
#define LCD_DC_PIN GPIO_PIN_9
#define LCD_DC_GPIO_PORT GPIOA
#define LCD_DC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define LCD_DC_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
/*##################### ADC1 ###################################*/
/**
* @brief ADC Interface pins
* used to detect motion of Joystick available on Adafruit 1.8" TFT shield
*/
#define NUCLEO_ADCx ADC1
#define NUCLEO_ADCx_CLK_ENABLE() __HAL_RCC_ADC1_CLK_ENABLE()
#define NUCLEO_ADCx_CLK_DISABLE() __HAL_RCC_ADC1_CLK_DISABLE()
#define NUCLEO_ADCx_GPIO_PORT GPIOB
#define NUCLEO_ADCx_GPIO_PIN GPIO_PIN_0
#define NUCLEO_ADCx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define NUCLEO_ADCx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
/**
* @}
*/
/**
* @}
*/
/** @addtogroup STM32F1XX_NUCLEO_Exported_Functions
* @{
*/
uint32_t BSP_GetVersion(void);
/** @addtogroup STM32F1XX_NUCLEO_LED_Functions STM32F1XX NUCLEO LED Functions
* @{
*/
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);
/**
* @}
*/
/** @addtogroup STM32F1XX_NUCLEO_BUTTON_Functions STM32F1XX NUCLEO BUTTON Functions
* @{
*/
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);
#if defined(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 /* __STM32F1XX_NUCLEO_H */

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

View File

@ -1,27 +0,0 @@
Copyright 2014 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 STM32VLDISCOVERY Component
![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32vldiscovery.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 **stm32vldiscovery** MCU component repository is one element of the **STM32CubeF1** MCU embedded software package, providing the **STM32VLDISCOVERY** 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/stm32vldiscovery/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/STM32CubeF1/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,80 +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 STM32VL-Discovery 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-stm32vl-discovery-board-drivers"><small>Release Notes for</small> <mark>STM32VL-Discovery Board Drivers</mark></h1>
<p>Copyright © 2014 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 STM32VL-Discovery 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 / 14-April-2017</label>
<div>
<h2 id="main-changes-1">Main Changes</h2>
<ul>
<li>Add STM32VL-Discovery_BSP_User_Manual.chm file.</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 / 18-December-2015</label>
<div>
<h2 id="main-changes-2">Main Changes</h2>
<ul>
<li>Rename GPIO_SPEED_HIGH to GPIO_SPEED_FREQ_HIGH for compatibility with STM32F1xx HAL Drivers V1.0.2.</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 / 02-December-2014</label>
<div>
<h2 id="main-changes-3">Main Changes</h2>
<ul>
<li>First Beta release for STM32VL-Discovery board RevC drivers for STM32Cube_FW_F1 project</li>
<li>BSP details
<ul>
<li>stm32vl_discovery.c / stm32vl_discovery.h</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

View File

@ -1,209 +0,0 @@
/**
******************************************************************************
* @file stm32vl_discovery.c
* @author MCD Application Team
* @version V1.0.2
* @date 14-April-2017
* @brief This file provides
* - set of firmware functions to manage Led and push-button
* available on STM32VL-Discovery board from STMicroelectronics.
******************************************************************************
* @attention
*
* Copyright (c) 2015 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 "stm32vl_discovery.h"
/** @addtogroup BSP
* @{
*/
/** @defgroup STM32VL_DISCOVERY STM32VL Discovery
* @brief This file provides firmware functions to manage Leds and push-buttons
* available on STM32VL discovery board from STMicroelectronics.
* @{
*/
/** @defgroup STM32VL_DISCOVERY_Private_Defines STM32VL DISCOVERY Private Defines
* @{
*/
/**
* @brief STM32VL-Discovery BSP Driver version number
*/
#define __STM32VL_DISCO_BSP_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32VL_DISCO_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */
#define __STM32VL_DISCO_BSP_VERSION_SUB2 (0x03) /*!< [15:8] sub2 version */
#define __STM32VL_DISCO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32VL_DISCO_BSP_VERSION ((__STM32VL_DISCO_BSP_VERSION_MAIN << 24)\
|(__STM32VL_DISCO_BSP_VERSION_SUB1 << 16)\
|(__STM32VL_DISCO_BSP_VERSION_SUB2 << 8 )\
|(__STM32VL_DISCO_BSP_VERSION_RC))
/**
* @}
*/
/** @defgroup STM32VL_DISCOVERY_Private_Variables STM32VL DISCOVERY Private Variables
* @{
*/
GPIO_TypeDef* LED_PORT[LEDn] = {LED3_GPIO_PORT,
LED4_GPIO_PORT};
const uint16_t LED_PIN[LEDn] = {LED3_PIN,
LED4_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};
/**
* @}
*/
/** @defgroup STM32VL_DISCOVERY_Exported_Functions STM32VL DISCOVERY Exported Functions
* @{
*/
/**
* @brief This method returns the STM32VL-Discovery BSP Driver version
* @retval version : 0xXYZR (8bits for each decimal, R for RC)
*/
uint32_t BSP_GetVersion(void)
{
return __STM32VL_DISCO_BSP_VERSION;
}
/**
* @brief Configures LED GPIO.
* @param Led: Specifies the Led to be configured.
* This parameter can be one of following parameters:
* @arg LED3
* @arg LED4
*/
void BSP_LED_Init(Led_TypeDef Led)
{
GPIO_InitTypeDef gpioinitstruct = {0};
/* Enable the GPIO_LED Clock */
LEDx_GPIO_CLK_ENABLE(Led);
/* Configure the GPIO_LED pin */
gpioinitstruct.Pin = LED_PIN[Led];
gpioinitstruct.Mode = GPIO_MODE_OUTPUT_PP;
gpioinitstruct.Pull = GPIO_NOPULL;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(LED_PORT[Led], &gpioinitstruct);
/* Reset PIN to switch off the LED */
HAL_GPIO_WritePin(LED_PORT[Led], LED_PIN[Led], GPIO_PIN_RESET);
}
/**
* @brief Turns selected LED On.
* @param Led: Specifies the Led to be set on.
* This parameter can be one of following parameters:
* @arg LED3
* @arg LED4
*/
void BSP_LED_On(Led_TypeDef Led)
{
HAL_GPIO_WritePin(LED_PORT[Led], LED_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 LED3
* @arg LED4
*/
void BSP_LED_Off(Led_TypeDef Led)
{
HAL_GPIO_WritePin(LED_PORT[Led], LED_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 LED3
* @arg LED4
*/
void BSP_LED_Toggle(Led_TypeDef Led)
{
HAL_GPIO_TogglePin(LED_PORT[Led], LED_PIN[Led]);
}
/**
* @brief Configures Button GPIO and EXTI Line.
* @param Button: Specifies the Button to be configured.
* This parameter should be: BUTTON_USER
* @param Button_Mode: 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 Button_Mode)
{
GPIO_InitTypeDef gpioinitstruct = {0};
/* Enable the BUTTON Clock */
BUTTONx_GPIO_CLK_ENABLE(Button);
gpioinitstruct.Pin = BUTTON_PIN[Button];
gpioinitstruct.Pull = GPIO_NOPULL;
gpioinitstruct.Speed = GPIO_SPEED_FREQ_HIGH;
if (Button_Mode == BUTTON_MODE_GPIO)
{
/* Configure Button pin as input */
gpioinitstruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(BUTTON_PORT[Button], &gpioinitstruct);
}
else if (Button_Mode == BUTTON_MODE_EXTI)
{
/* Configure Button pin as input with External interrupt */
gpioinitstruct.Mode = GPIO_MODE_IT_RISING;
HAL_GPIO_Init(BUTTON_PORT[Button], &gpioinitstruct);
/* Enable and set Button EXTI Interrupt to the lowest priority */
HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0);
HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
}
}
/**
* @brief Returns the selected Button state.
* @param Button: Specifies the Button to be checked.
* This parameter should be: BUTTON_USER
* @retval Button state.
*/
uint32_t BSP_PB_GetState(Button_TypeDef Button)
{
return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@ -1,151 +0,0 @@
/**
******************************************************************************
* @file stm32vl_discovery.h
* @author MCD Application Team
* @version V1.0.2
* @date 14-April-2017
* @brief This file contains definitions for STM32VL-Discovery's Leds, push-buttons
******************************************************************************
* @attention
*
* Copyright (c) 2015 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 __STM32VL_DISCOVERY_H
#define __STM32VL_DISCOVERY_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup STM32VL_DISCOVERY
* @{
*/
/** @defgroup STM32VL_DISCOVERY_Exported_Types STM32VL DISCOVERY Exported Types
* @{
*/
typedef enum
{
LED3 = 0,
LED4 = 1,
LED_GREEN = LED3,
LED_BLUE = LED4
} Led_TypeDef;
typedef enum
{
BUTTON_USER = 0,
} Button_TypeDef;
typedef enum
{
BUTTON_MODE_GPIO = 0,
BUTTON_MODE_EXTI = 1
} ButtonMode_TypeDef;
/**
* @}
*/
/** @defgroup STM32VL_DISCOVERY_Exported_Constants STM32VL DISCOVERY Exported Constants
* @{
*/
/**
* @brief Define for STM32VL-Discovery board
*/
#if !defined (USE_STM32VL_DISCO)
#define USE_STM32VL_DISCO
#endif
/** @defgroup STM32VL_DISCOVERY_LED STM32VL DISCOVERY LED
* @{
*/
#define LEDn 2
#define LED3_PIN GPIO_PIN_9 /* PC.09 */
#define LED3_GPIO_PORT GPIOC
#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
#define LED4_PIN GPIO_PIN_8 /* PC.08 */
#define LED4_GPIO_PORT 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) LED3_GPIO_CLK_ENABLE(); \
else LED4_GPIO_CLK_ENABLE(); } while(0)
#define LEDx_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? LED3_GPIO_CLK_DISABLE() : LED4_GPIO_CLK_DISABLE())
/**
* @}
*/
/** @defgroup STM32VL_DISCOVERY_BUTTON STM32VL DISCOVERY BUTTON
* @{
*/
#define BUTTONn 1
/**
* @brief Key push-button
*/
#define USER_BUTTON_PIN GPIO_PIN_0 /* PA.00 */
#define USER_BUTTON_GPIO_PORT GPIOA
#define USER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define USER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define USER_BUTTON_EXTI_IRQn EXTI0_IRQn
#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do {USER_BUTTON_GPIO_CLK_ENABLE();} while(0)
#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) (USER_BUTTON_GPIO_CLK_DISABLE())
/**
* @}
*/
/**
* @}
*/
/** @addtogroup STM32VL_DISCOVERY_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 Mode);
uint32_t BSP_PB_GetState(Button_TypeDef Button);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __STM32VL_DISCOVERY_H */