Hello TOR 2k24
Have fun 🚀
This commit is contained in:
38
RTE/Hesso_pack/clock_216.c
Normal file
38
RTE/Hesso_pack/clock_216.c
Normal file
@ -0,0 +1,38 @@
|
||||
|
||||
#include "stm32f7xx_hal.h"
|
||||
#include "clock_216.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
// Setup system clock to 216MHz
|
||||
//------------------------------------------------------------------------------
|
||||
void SystemClock_Config (void) {
|
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
||||
RCC_OscInitTypeDef RCC_OscInitStruct;
|
||||
|
||||
/* Enable HSE Oscillator and activate PLL with HSE as source */
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||
RCC_OscInitStruct.PLL.PLLM = 25;
|
||||
RCC_OscInitStruct.PLL.PLLN = 432;
|
||||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||||
RCC_OscInitStruct.PLL.PLLQ = 9;
|
||||
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||
|
||||
/* Activate the OverDrive to reach the 216 MHz Frequency */
|
||||
HAL_PWREx_EnableOverDrive();
|
||||
|
||||
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
|
||||
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
|
||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
|
||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
|
||||
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7);
|
||||
}
|
||||
|
||||
|
17
RTE/Hesso_pack/clock_216.h
Normal file
17
RTE/Hesso_pack/clock_216.h
Normal file
@ -0,0 +1,17 @@
|
||||
/************************************************************************//**
|
||||
* \file clock_216.h
|
||||
* \brief Function to set the system clock to 216 MHz
|
||||
* \author pascal (dot) sartoretti (at) hevs (dot) ch
|
||||
***************************************************************************/
|
||||
#ifndef __CLOCK_216_H
|
||||
#define __CLOCK_216_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Inits the system clock to 216 MHz
|
||||
***************************************************************************/
|
||||
extern void SystemClock_Config (void);
|
||||
|
||||
|
||||
#endif /* __CLOCK_216_H */
|
58
RTE/Hesso_pack/ext_buttons.c
Normal file
58
RTE/Hesso_pack/ext_buttons.c
Normal file
@ -0,0 +1,58 @@
|
||||
|
||||
#include "stm32f7xx_hal.h"
|
||||
#include "ext_buttons.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
int32_t Ext_Buttons_Init (void) {
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
/* GPIO Ports Clock Enable */
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOI_CLK_ENABLE();
|
||||
|
||||
/* Configure GPIO pin: PI2 (BTN_0) */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_2;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
|
||||
/* Configure GPIO pin: PI3 (BTN_1) */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_3;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
|
||||
/* Configure GPIO pin: PG7 (BTN_2) */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_7;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
|
||||
/* Configure GPIO pin: PG6 (BTN_3) */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_6;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
uint32_t Ext_Buttons_GetState (void) {
|
||||
uint32_t val = 0;
|
||||
|
||||
if (HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_2) == GPIO_PIN_RESET) {
|
||||
val |= 1;
|
||||
}
|
||||
if (HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_3) == GPIO_PIN_RESET) {
|
||||
val |= 2;
|
||||
}
|
||||
if (HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_7) == GPIO_PIN_RESET) {
|
||||
val |= 4;
|
||||
}
|
||||
if (HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_6) == GPIO_PIN_RESET) {
|
||||
val |= 8;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
23
RTE/Hesso_pack/ext_buttons.h
Normal file
23
RTE/Hesso_pack/ext_buttons.h
Normal file
@ -0,0 +1,23 @@
|
||||
/************************************************************************//**
|
||||
* \file ext_buttons.h
|
||||
* \brief Function to use the extension uart
|
||||
* \author pascal (dot) sartoretti (at) hevs (dot) ch
|
||||
***************************************************************************/
|
||||
#ifndef __EXT_BUTTONS_H
|
||||
#define __EXT_BUTTONS_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Inits the external buttons usage.
|
||||
* \return Always #0
|
||||
***************************************************************************/
|
||||
extern int32_t Ext_Buttons_Init(void);
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Reads the buttons status
|
||||
* \return The binary state of the buttons (example 4 for button 2 pressed).
|
||||
***************************************************************************/
|
||||
extern uint32_t Ext_Buttons_GetState(void);
|
||||
|
||||
#endif /* __BOARD_BUTTONS_H */
|
579
RTE/Hesso_pack/ext_keyboard.c
Normal file
579
RTE/Hesso_pack/ext_keyboard.c
Normal file
@ -0,0 +1,579 @@
|
||||
|
||||
#include "stm32f7xx_hal.h"
|
||||
#include "ext_keyboard.h"
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
#define NORMAL 0
|
||||
#define SHIFT 1
|
||||
#define CONTROL 2
|
||||
#define ALT 3
|
||||
#define TABULATOR 0x09
|
||||
#define BACKSPACE 0x08
|
||||
#define ESCAPE 0x1B
|
||||
#define CR 0x0D
|
||||
#define F1 0x10
|
||||
#define F2 0x11
|
||||
#define F3 0x12
|
||||
#define F4 0x13
|
||||
#define F5 0x14
|
||||
#define F6 0x15
|
||||
#define F7 0x16
|
||||
#define F8 0x17
|
||||
#define F9 0x18
|
||||
#define F10 0x19
|
||||
#define F11 0x1A
|
||||
#define F12 0x1B
|
||||
|
||||
static SPI_HandleTypeDef keyboard; // SPI keyboard handle
|
||||
uint8_t ext_kbChar; // exported to global use
|
||||
uint8_t scan;
|
||||
static uint32_t newChar=0; // internal flag
|
||||
uint8_t release;
|
||||
uint8_t state;
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
uint8_t ScanCodeAnalyse(uint8_t scan)
|
||||
{
|
||||
switch(scan)
|
||||
{
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0xF0: release = TRUE; return 0 ; /* release key code */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x14: if (release == FALSE)
|
||||
state = CONTROL;
|
||||
else
|
||||
{
|
||||
state = NORMAL;
|
||||
release = FALSE;
|
||||
}
|
||||
return 0x00;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x11: if (release == FALSE)
|
||||
state = ALT;
|
||||
else
|
||||
{
|
||||
state = NORMAL;
|
||||
release = FALSE;
|
||||
}
|
||||
return 0x00;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x12:
|
||||
case 0x58:
|
||||
case 0x59: if (release == FALSE)
|
||||
state = SHIFT;
|
||||
else
|
||||
{
|
||||
state = NORMAL;
|
||||
release = FALSE;
|
||||
}
|
||||
return 0x00;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
if (release == TRUE)
|
||||
{
|
||||
release = FALSE;
|
||||
return 0x00;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
switch(scan)
|
||||
{
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x05: return F1; // 'F1' to 'F12'
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x06: return F2;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x04: return F3;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x0c: return F4;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x03: return F5;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x0B: return F6;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x83: return F7;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x0A: return F8;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x01: return F9;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x09: return F10;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x78: return F11;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x07: return F12;
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x16: switch (state) /* key '1' */
|
||||
{
|
||||
case NORMAL : return '1';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '!';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x1E: switch (state) /* key '2' */
|
||||
{
|
||||
case NORMAL : return '2';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '@';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x26: switch (state) /* key '3' */
|
||||
{
|
||||
case NORMAL : return '3';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '#';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x25: switch (state) /* key '4' */
|
||||
{
|
||||
case NORMAL : return '4';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '$';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x2E: switch (state) /* key '5' */
|
||||
{
|
||||
case NORMAL : return '5';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '%';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x36: switch (state) /* key '6' */
|
||||
{
|
||||
case NORMAL : return '6';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '^';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x6C:
|
||||
case 0x3D: switch (state) /* key '7' */
|
||||
{
|
||||
case NORMAL : return '7';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '&';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x75:
|
||||
case 0x3E: switch (state) /* key '8' */
|
||||
{
|
||||
case NORMAL : return '8';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '*';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x7D:
|
||||
case 0x46: switch (state) /* key '9' */
|
||||
{
|
||||
case NORMAL : return '9';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '(';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x7C:
|
||||
case 0x45: switch (state) /* key '0' */
|
||||
{
|
||||
case NORMAL : return '0';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return ')';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x7E: switch (state) /* key '*' */
|
||||
{
|
||||
case NORMAL : return '*';
|
||||
case CONTROL : return F11;
|
||||
case SHIFT : return '?';
|
||||
default : return 0xBF; /* ? vertical flipped */
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x4E: switch (state) /* key '-' */
|
||||
{
|
||||
case NORMAL : return '-';
|
||||
case CONTROL : return 0;
|
||||
case SHIFT : return '_';
|
||||
default : return 0x00;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x65: return 0x1B; /* End button -> Escape command */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x15: switch (state) /* key 'Q' */
|
||||
{
|
||||
case SHIFT : return 'Q';
|
||||
case CONTROL : return 0x11;
|
||||
default : return 'q';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x1D: switch (state) /* key 'W' */
|
||||
{
|
||||
case SHIFT : return 'W';
|
||||
case CONTROL : return 0x17;
|
||||
default : return 'w';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x24: switch (state) /* key 'E' */
|
||||
{
|
||||
case SHIFT : return 'E';
|
||||
case CONTROL : return 0x05;
|
||||
default : return 'e';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x2D: switch (state) /* key 'R' */
|
||||
{
|
||||
case SHIFT : return 'R';
|
||||
case CONTROL : return 0x12;
|
||||
default : return 'r';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x2C: switch (state) /* key 'T' */
|
||||
{
|
||||
case SHIFT : return 'T';
|
||||
case CONTROL : return 0x14;
|
||||
default : return 't';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x35: switch (state) /* key 'Z' */
|
||||
{
|
||||
case SHIFT : return 'Y';
|
||||
case CONTROL : return 0x1A;
|
||||
default : return 'y';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x6B:
|
||||
case 0x3C: switch (state) /* key 'U' */
|
||||
{
|
||||
case SHIFT : return 'U';
|
||||
case CONTROL : return 0x15;
|
||||
default : return 'u';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x73:
|
||||
case 0x43: switch (state) /* key 'I' */
|
||||
{
|
||||
case SHIFT : return 'I';
|
||||
case CONTROL : return 0x09;
|
||||
default : return 'i';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x74:
|
||||
case 0x44: switch (state) /* key 'O' */
|
||||
{
|
||||
case SHIFT : return 'O';
|
||||
case CONTROL : return 0x0F;
|
||||
default : return 'o';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x7B:
|
||||
case 0x4D: switch (state) /* key 'P' */
|
||||
{
|
||||
case SHIFT : return 'P';
|
||||
case CONTROL : return 0x10;
|
||||
default : return 'p';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x5B: switch (state) /* key '<27>' */
|
||||
{
|
||||
case SHIFT : return '}';
|
||||
case ALT : return 0;
|
||||
default : return ']';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x66: return 0x08; /* Backspace */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x0D: return 0x09; /* Horizontal tabulator */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x1C: switch (state) /* key 'A' */
|
||||
{
|
||||
case SHIFT : return 'A';
|
||||
case CONTROL : return 0x01;
|
||||
default : return 'a';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x1B: switch (state) /* key 'S' */
|
||||
{
|
||||
case SHIFT : return 'S';
|
||||
case CONTROL : return 0x13;
|
||||
default : return 's';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x23: switch (state) /* key 'D' */
|
||||
{
|
||||
case SHIFT : return 'D';
|
||||
case CONTROL : return 0x04;
|
||||
default : return 'd';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x2B: switch (state) /* key 'F' */
|
||||
{
|
||||
case SHIFT : return 'F';
|
||||
case CONTROL : return 0x06;
|
||||
default : return 'f';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x34: switch (state) /* key 'G' */
|
||||
{
|
||||
case SHIFT : return 'G';
|
||||
case CONTROL : return 0x07;
|
||||
default : return 'g';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x33: switch (state) /* key 'H' */
|
||||
{
|
||||
case SHIFT : return 'H';
|
||||
case CONTROL : return 0x08;
|
||||
default : return 'h';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x69:
|
||||
case 0x3B: switch (state) /* key 'J' */
|
||||
{
|
||||
case SHIFT : return 'J';
|
||||
case CONTROL : return 0x0A;
|
||||
default : return 'j';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x72:
|
||||
case 0x42: switch (state) /* key 'K' */
|
||||
{
|
||||
case SHIFT : return 'K';
|
||||
case CONTROL : return 0x0B;
|
||||
default : return 'k';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x7A:
|
||||
case 0x4B: switch (state) /* key 'L' */
|
||||
{
|
||||
case SHIFT : return 'L';
|
||||
case CONTROL : return 0x0C;
|
||||
default : return 'l';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x54: switch (state) /* key '[' */
|
||||
{
|
||||
case SHIFT : return '{';
|
||||
case ALT : return 0; /* beta symbol */
|
||||
default : return '[';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x52: switch (state) /* key ''' */
|
||||
{
|
||||
case SHIFT : return '"';
|
||||
case ALT : return 0;
|
||||
default : return 0x27;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x1A: switch (state) /* key 'Y' */
|
||||
{
|
||||
case SHIFT : return 'Z';
|
||||
case CONTROL : return 0x19;
|
||||
default : return 'z';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x22: switch (state) /* key 'X' */
|
||||
{
|
||||
case SHIFT : return 'X';
|
||||
case CONTROL : return 0x18;
|
||||
default : return 'x';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x21: switch (state) /* key 'C' */
|
||||
{
|
||||
case SHIFT : return 'C';
|
||||
case CONTROL : return 0x03;
|
||||
default : return 'c';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x2A: switch (state) /* key 'V' */
|
||||
{
|
||||
case SHIFT : return 'V';
|
||||
case CONTROL : return 0x16;
|
||||
default : return 'v';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x32: switch (state) /* key 'B' */
|
||||
{
|
||||
case SHIFT : return 'B';
|
||||
case CONTROL : return 0x02;
|
||||
default : return 'b';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x31: switch (state) /* key 'N' */
|
||||
{
|
||||
case SHIFT : return 'N';
|
||||
case CONTROL : return 0x0E;
|
||||
default : return 'n';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x70:
|
||||
case 0x3A: switch (state) /* key 'M' */
|
||||
{
|
||||
case SHIFT : return 'M';
|
||||
case CONTROL : return 0x0D;
|
||||
default : return 'm';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x41: switch (state) /* key ',' */
|
||||
{
|
||||
case SHIFT : return '<';
|
||||
default : return ',';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x49: switch (state) /* key '.' */
|
||||
{
|
||||
case SHIFT : return '>';
|
||||
default : return '.';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x5A: return 0x0D; /* Carriage return (Enter) */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x29: return ' '; /* Spacebar */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x63: switch (state) /* key 'UP ARROW' */
|
||||
{
|
||||
case SHIFT : return 'U';
|
||||
default : return 'u';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x60: switch (state) /* key 'DOWN ARROW' */
|
||||
{
|
||||
case SHIFT : return 'D';
|
||||
default : return 'd';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x61: switch (state) /* key 'LEFT ARROW' */
|
||||
{
|
||||
case SHIFT : return 'L';
|
||||
default : return 'l';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x6A: switch (state) /* key 'RIGHT ARROW' */
|
||||
{
|
||||
case SHIFT : return 'R';
|
||||
default : return 'r';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x0E: switch (state) /* key 'apostroph' */
|
||||
{
|
||||
case SHIFT : return '~';
|
||||
default : return '`';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x79:
|
||||
case 0x4C: switch (state) /* key ';' */
|
||||
{
|
||||
case SHIFT : return ':';
|
||||
default : return ';';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x4A: switch (state) /* key '/' */
|
||||
{
|
||||
case SHIFT : return '?';
|
||||
default : return '/';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x5D: switch (state) /* key '\' */
|
||||
{
|
||||
case SHIFT : return '|';
|
||||
default : return '\\';
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
case 0x55: switch (state) /* key '=' */
|
||||
{
|
||||
case SHIFT : return '+';
|
||||
default : return '=';
|
||||
}
|
||||
}
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
void EXTI9_5_IRQHandler(void)
|
||||
{
|
||||
// read keyboard data and store it on global variable
|
||||
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET); // SPI CS activate
|
||||
HAL_SPI_Receive(&keyboard,&scan,1,100); // SPI read
|
||||
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET); // SPI CS desactivate
|
||||
// process irq
|
||||
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8); // clear irq and callback
|
||||
ext_kbChar = ScanCodeAnalyse(scan);
|
||||
if(ext_kbChar != 0)
|
||||
{
|
||||
newChar = 1;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
void Ext_Keyboard_Init(void)
|
||||
{
|
||||
volatile uint8_t dummy;
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_GPIOI_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||||
__HAL_RCC_SPI2_CLK_ENABLE();
|
||||
|
||||
/**SPI2 GPIO Configuration
|
||||
PI1 ------> SPI2_SCK
|
||||
PB14 ------> SPI2_MISO
|
||||
PB15 ------> SPI2_MOSI
|
||||
PI0 ------> /SPI_CB_SS
|
||||
PF8 ------> /SPI_INT
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_1;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
||||
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
|
||||
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_8;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
|
||||
keyboard.Instance = SPI2;
|
||||
keyboard.Init.Mode = SPI_MODE_MASTER;
|
||||
keyboard.Init.Direction = SPI_DIRECTION_2LINES;
|
||||
keyboard.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||
keyboard.Init.CLKPolarity = SPI_POLARITY_HIGH;
|
||||
keyboard.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
keyboard.Init.NSS = SPI_NSS_SOFT;
|
||||
keyboard.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; //3.333MHz -> (Fosc/4) / 16
|
||||
keyboard.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
keyboard.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
keyboard.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||
keyboard.Init.CRCPolynomial = 7;
|
||||
keyboard.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
|
||||
keyboard.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
|
||||
HAL_SPI_Init(&keyboard);
|
||||
// dummy read to clear any glitch
|
||||
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
|
||||
HAL_SPI_Receive(&keyboard,(uint8_t *)&dummy,1,10);
|
||||
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
|
||||
// enable interrupts on keyboard ISR
|
||||
HAL_NVIC_SetPriority(EXTI9_5_IRQn,5,5);
|
||||
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
uint8_t Ext_Keyboard_Read(void)
|
||||
{
|
||||
while(newChar == 0) // wait new char coming
|
||||
{}
|
||||
newChar = 0; // clear it
|
||||
return ext_kbChar; // return read char
|
||||
}
|
||||
|
||||
|
||||
|
53
RTE/Hesso_pack/ext_keyboard.h
Normal file
53
RTE/Hesso_pack/ext_keyboard.h
Normal file
@ -0,0 +1,53 @@
|
||||
/************************************************************************//**
|
||||
* \file ext_keyboard.h
|
||||
* \brief Function to use the extension keyboard
|
||||
* \author pascal (dot) sartoretti (at) hevs (dot) ch
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __EXT_KEYBOARD_H
|
||||
#define __EXT_KEYBOARD_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "stm32f7xx_hal.h"
|
||||
|
||||
extern uint8_t ext_kbChar;
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Inits the extension keyboard
|
||||
* The extension keyboard use interrupt from keyboard (PF8)
|
||||
*
|
||||
* Read keyboard non blocking (interrupt):
|
||||
* ---------------------------------------
|
||||
* To read the keyboard, the callback function HAL_GPIO_EXTI_Callback has
|
||||
* to be implemented.
|
||||
* the example below send the keyboard char to the serial port
|
||||
* void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
||||
* {
|
||||
* if(GPIO_Pin == GPIO_PIN_8)
|
||||
* {
|
||||
* HAL_UART_Transmit(&ext_uart, &ext_kbChar, 1,100);;
|
||||
* }
|
||||
* }
|
||||
* Read keyboard blocking (pooling until key pressed):
|
||||
* ---------------------------------------------------
|
||||
* The functions below have to be used:
|
||||
* pressed = Ext_Keyboard_Read();
|
||||
*
|
||||
* \warning The external interrupts (5,6,7,9) have to be implemented
|
||||
* in the ext_keyboard.c file because they share the same processor irq
|
||||
* EXTI9_5_IRQHandler.
|
||||
***************************************************************************/
|
||||
void Ext_Keyboard_Init(void);
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Read the pressed key on extension keyboard
|
||||
* \return The ASCII code of key pressed.
|
||||
*
|
||||
* \warning This function is blocking until a char is received
|
||||
***************************************************************************/
|
||||
uint8_t Ext_Keyboard_Read(void);
|
||||
|
||||
|
||||
#endif /* __BOARD_LED_H */
|
||||
|
224
RTE/Hesso_pack/ext_led.c
Normal file
224
RTE/Hesso_pack/ext_led.c
Normal file
@ -0,0 +1,224 @@
|
||||
|
||||
#include "stm32f7xx_hal.h"
|
||||
#include "ext_led.h"
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
static const uint8_t cie1931[101] =
|
||||
{
|
||||
0, 0, 1, 1, 1, 1, 2, 2, 2, 3,
|
||||
3, 3, 4, 4, 4, 5, 5, 6, 6, 7,
|
||||
8, 8, 9, 10, 10, 11, 12, 13, 14, 15,
|
||||
16, 17, 18, 19, 20, 22, 23, 24, 26, 27,
|
||||
29, 30, 32, 34, 35, 37, 39, 41, 43, 45,
|
||||
47, 49, 51, 54, 56, 58, 61, 64, 66, 69,
|
||||
72, 75, 78, 81, 84, 87, 90, 93, 97, 100,
|
||||
104, 108, 111, 115, 119, 123, 127, 131, 136, 140,
|
||||
145, 149, 154, 159, 163, 168, 173, 179, 184, 189,
|
||||
195, 200, 206, 212, 217, 223, 230, 236, 242, 248,
|
||||
255,
|
||||
};
|
||||
|
||||
#if LIGHTNESS_PWM_STEP != 100
|
||||
#error this cie1931 array supports only 100 steps, feel free to implement your own
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
uint8_t lightness_to_pwm(uint8_t percentage)
|
||||
{
|
||||
if(percentage > (LIGHTNESS_PWM_STEP-1))
|
||||
percentage = (LIGHTNESS_PWM_STEP-1);
|
||||
|
||||
return cie1931[percentage];
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
int32_t Ext_LED_Init(void) {
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
//----------------------------------------------------------------------------
|
||||
// Configure GPIO pin: PA15 (LED0)
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE(); // enable GPIO timer
|
||||
__HAL_RCC_TIM2_CLK_ENABLE(); // enable timer 2 clock
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_15; // used pin is PA15
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // alternate function use
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; // no pullup
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;// timer 2 is used
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FAST; // speed is fast
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
TIM2->CCER = TIM_CCER_CC1E; // compare for PWM usage
|
||||
TIM2->PSC = 16; // timer prescaler
|
||||
TIM2->ARR = 255; // max count value
|
||||
TIM2->CCR1 = lightness_to_pwm(0); // duty cycle
|
||||
TIM2->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
|
||||
TIM2->EGR |= TIM_EGR_UG; // update register now
|
||||
TIM2->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN; // start the timer
|
||||
//----------------------------------------------------------------------------
|
||||
// Configure GPIO pin: PH6 (LED1)
|
||||
__HAL_RCC_GPIOH_CLK_ENABLE(); // enable GPIO timer
|
||||
__HAL_RCC_TIM12_CLK_ENABLE(); // enable timer 12 clock
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_6; // used pin is PH6
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // alternate function use
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; // no pullup
|
||||
GPIO_InitStruct.Alternate = GPIO_AF9_TIM12;// timer 12 is used
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FAST; // speed is fast
|
||||
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
|
||||
|
||||
TIM12->CCER = TIM_CCER_CC1E; // compare for PWM usage
|
||||
TIM12->PSC = 16; // timer prescaler
|
||||
TIM12->ARR = 255; // max count value
|
||||
TIM12->CCR1 = lightness_to_pwm(0); // duty cycle
|
||||
TIM12->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
|
||||
TIM12->EGR |= TIM_EGR_UG; // update register now
|
||||
TIM12->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN; // start the timer
|
||||
//----------------------------------------------------------------------------
|
||||
// Configure GPIO pin: PA8 (LED2)
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE(); // enable GPIO timer
|
||||
__HAL_RCC_TIM1_CLK_ENABLE(); // enable timer 1 clock
|
||||
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_8; // used pin is PA8
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // alternate function use
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; // no pullup
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;// timer 5 is used
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FAST; // speed is fast
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
TIM1->CCER = TIM_CCER_CC1E; // compare for PWM usage
|
||||
TIM1->PSC = 16; // timer prescaler
|
||||
TIM1->ARR = 255; // max count value
|
||||
TIM1->CCR1 = lightness_to_pwm(0); // duty cycle
|
||||
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
|
||||
TIM1->EGR |= TIM_EGR_UG; // update register now
|
||||
TIM1->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN; // start the timer
|
||||
TIM1->BDTR = TIM_BDTR_MOE; // master output enable
|
||||
//----------------------------------------------------------------------------
|
||||
// Configure GPIO pin: PB4 (LED3)
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE(); // enable GPIO timer
|
||||
__HAL_RCC_TIM3_CLK_ENABLE(); // enable timer 3 clock
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_4; // used pin is PB4
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // alternate function use
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL; // no pullup
|
||||
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;// timer 3 is used
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FAST; // speed is fast
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
TIM3->CCER = TIM_CCER_CC1E; // compare for PWM usage
|
||||
TIM3->PSC = 16; // timer prescaler
|
||||
TIM3->ARR = 255; // max count value
|
||||
TIM3->CCR1 = lightness_to_pwm(0); // duty cycle
|
||||
TIM3->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
|
||||
TIM3->EGR |= TIM_EGR_UG; // update register now
|
||||
TIM3->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN; // start the timer
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
int32_t Ext_LED_On (uint32_t num) {
|
||||
|
||||
if((num & 1) != 0)
|
||||
{
|
||||
TIM2->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
|
||||
}
|
||||
if((num & 2) != 0)
|
||||
{
|
||||
TIM12->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
|
||||
}
|
||||
if((num & 4) != 0)
|
||||
{
|
||||
TIM1->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
|
||||
}
|
||||
if((num & 8) != 0)
|
||||
{
|
||||
TIM3->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
int32_t Ext_LED_Off (uint32_t num) {
|
||||
|
||||
if((num & 1) != 0)
|
||||
{
|
||||
TIM2->CCR1 = lightness_to_pwm(0);
|
||||
}
|
||||
if((num & 2) != 0)
|
||||
{
|
||||
TIM12->CCR1 = lightness_to_pwm(0);
|
||||
}
|
||||
if((num & 4) != 0)
|
||||
{
|
||||
TIM1->CCR1 = lightness_to_pwm(0);
|
||||
}
|
||||
if((num & 8) != 0)
|
||||
{
|
||||
TIM3->CCR1 = lightness_to_pwm(0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
int32_t Ext_LED_PWM (uint32_t num, uint32_t duty) {
|
||||
|
||||
if((num & 1) != 0)
|
||||
{
|
||||
TIM2->CCR1 = lightness_to_pwm(duty);
|
||||
}
|
||||
if((num & 2) != 0)
|
||||
{
|
||||
TIM12->CCR1 = lightness_to_pwm(duty);
|
||||
}
|
||||
if((num & 4) != 0)
|
||||
{
|
||||
TIM1->CCR1 = lightness_to_pwm(duty);
|
||||
}
|
||||
if((num & 8) != 0)
|
||||
{
|
||||
TIM3->CCR1 = lightness_to_pwm(duty);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
int32_t Ext_LEDs(uint32_t num) {
|
||||
|
||||
if((num & 1) != 0)
|
||||
{
|
||||
TIM2->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
|
||||
}
|
||||
else
|
||||
{
|
||||
TIM2->CCR1 = lightness_to_pwm(0);
|
||||
}
|
||||
if((num & 2) != 0)
|
||||
{
|
||||
TIM12->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
|
||||
}
|
||||
else
|
||||
{
|
||||
TIM12->CCR1 = lightness_to_pwm(0);
|
||||
}
|
||||
if((num & 4) != 0)
|
||||
{
|
||||
TIM1->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
|
||||
}
|
||||
else
|
||||
{
|
||||
TIM1->CCR1 = lightness_to_pwm(0);
|
||||
}
|
||||
if((num & 8) != 0)
|
||||
{
|
||||
TIM3->CCR1 = lightness_to_pwm(LIGHTNESS_PWM_STEP);
|
||||
}
|
||||
else
|
||||
{
|
||||
TIM3->CCR1 = lightness_to_pwm(0);
|
||||
}
|
||||
return 0;
|
||||
}
|
51
RTE/Hesso_pack/ext_led.h
Normal file
51
RTE/Hesso_pack/ext_led.h
Normal file
@ -0,0 +1,51 @@
|
||||
/************************************************************************//**
|
||||
* \file ext_led.h
|
||||
* \brief Function to use the extension LEDs
|
||||
* \author pascal (dot) sartoretti (at) hevs (dot) ch
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __EXT_LED_H
|
||||
#define __EXT_LED_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define LIGHTNESS_PWM_STEP 100
|
||||
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Inits the external Leds usage.
|
||||
* \return Always #0
|
||||
***************************************************************************/
|
||||
extern int32_t Ext_LED_Init (void);
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Turn on one led.
|
||||
* \param num The led to turn on (1,2,4,8)
|
||||
* \return Always 0
|
||||
***************************************************************************/
|
||||
extern int32_t Ext_LED_On (uint32_t num);
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Turn off one led.
|
||||
* \param num The led to turn off (1,2,4,8)
|
||||
* \return Always 0
|
||||
***************************************************************************/
|
||||
extern int32_t Ext_LED_Off (uint32_t num);
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Set a power on a led.
|
||||
* \param num The led to turn set the power (1,2,4,8)
|
||||
* \param duty The power of the led (0 to 255)
|
||||
* \return Always 0
|
||||
***************************************************************************/
|
||||
extern int32_t Ext_LED_PWM (uint32_t num, uint32_t duty);
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Set the state on all leds.
|
||||
* \param val The binary state of the four leds (example 0b1101).
|
||||
* \return Always 0
|
||||
***************************************************************************/
|
||||
extern int32_t Ext_LEDs(uint32_t val);
|
||||
|
||||
#endif /* __BOARD_LED_H */
|
57
RTE/Hesso_pack/ext_uart.c
Normal file
57
RTE/Hesso_pack/ext_uart.c
Normal file
@ -0,0 +1,57 @@
|
||||
|
||||
#include "stm32f7xx_hal.h"
|
||||
#include "ext_uart.h"
|
||||
|
||||
UART_HandleTypeDef ext_uart; // extension uart handler
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
if(huart->Instance==USART6)
|
||||
{
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||
__HAL_RCC_USART6_CLK_ENABLE();
|
||||
|
||||
/**USART6 GPIO Configuration
|
||||
PC7 ------> USART6_RX
|
||||
PC6 ------> USART6_TX
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_6;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF8_USART6;
|
||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
void Ext_UART_Init(uint32_t speed)
|
||||
{
|
||||
ext_uart.Instance = USART6;
|
||||
ext_uart.Init.BaudRate = speed;
|
||||
ext_uart.Init.WordLength = UART_WORDLENGTH_8B;
|
||||
ext_uart.Init.StopBits = UART_STOPBITS_1;
|
||||
ext_uart.Init.Parity = UART_PARITY_NONE;
|
||||
ext_uart.Init.Mode = UART_MODE_TX_RX;
|
||||
ext_uart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
ext_uart.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
ext_uart.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
ext_uart.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
HAL_UART_Init(&ext_uart);
|
||||
/* USART6 interrupt Init */
|
||||
HAL_NVIC_SetPriority(USART6_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(USART6_IRQn);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
void USART6_IRQHandler(void)
|
||||
{
|
||||
HAL_UART_IRQHandler(&ext_uart);
|
||||
}
|
||||
|
||||
|
44
RTE/Hesso_pack/ext_uart.h
Normal file
44
RTE/Hesso_pack/ext_uart.h
Normal file
@ -0,0 +1,44 @@
|
||||
/************************************************************************//**
|
||||
* \file ext_uart.h
|
||||
* \brief Function to use the extension uart
|
||||
* \author pascal (dot) sartoretti (at) hevs (dot) ch
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __EXT_UART_H
|
||||
#define __EXT_UART_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "stm32f7xx_hal.h"
|
||||
|
||||
extern UART_HandleTypeDef ext_uart; // extension uart handle
|
||||
|
||||
/************************************************************************//**
|
||||
* \brief Inits the extension uart
|
||||
* \param speed This si the uart speed selected for example 115200.
|
||||
* The extension uart could be use with or without interrupts.
|
||||
*
|
||||
* Without interrupts:
|
||||
* -------------------
|
||||
* To send something on the uart, you have to use HAL_UART_Transmit function
|
||||
* as the example below.
|
||||
* error = HAL_UART_Transmit(&ext_uart, msg, sizeof(msg),50);
|
||||
* To receive you have to use HAL_UART_Receive as example below.
|
||||
* error = HAL_UART_Receive(&ext_uart, msg, sizeof(msg),HAL_MAX_DELAY);
|
||||
* The HAL_MAX_DELAY waits until receive is finished.
|
||||
*
|
||||
* With interrupts:
|
||||
* ----------------
|
||||
* The functions below have to be used:
|
||||
* HAL_UART_Transmit_IT(&ext_uart," Welcome\n\r", 10);
|
||||
* HAL_UART_Receive_IT(&ext_uart,data,8);
|
||||
*
|
||||
* The callback functions above could be implemented for usage on interrupt
|
||||
* mode when the full size is transmitted (or received).
|
||||
* void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||
* void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
||||
*
|
||||
***************************************************************************/
|
||||
extern void Ext_UART_Init(uint32_t speed);
|
||||
|
||||
#endif /* __BOARD_LED_H */
|
Reference in New Issue
Block a user