Make demo work with STM32F4 board from aliexpress for SecureHID project

This commit is contained in:
jaseg 2018-11-01 16:39:56 +09:00
parent 7e5d99e18f
commit 7c8490211b
3 changed files with 32 additions and 63 deletions

View file

@ -18,13 +18,16 @@
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
/* Linker script for ST STM32F4DISCOVERY (STM32F407VG, 1024K flash, 128K RAM). */
/* Minimal linker script for chinese STM32F4 board (STM32F407VE, 512K flash, 128K RAM). */
/* Define memory regions. */
MEMORY
{
rom (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
rom (rx) : ORIGIN = 0x08000000, LENGTH = 512K
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 112K /* Main SRAM */
sram2 (rwx) : ORIGIN = 0x2001c000, LENGTH = 16K /* SRAM2 with some security features (?) */
ccm (rwx) : ORIGIN = 0x10000000, LENGTH = 64K /* Fast core-coupled memory */
backup (rwx) : ORIGIN = 0x40024000, LENGTH = 4K /* Battery-backed backup SRAM */
}
/* Include the common ld script. */

16
openocd.cfg Normal file
View file

@ -0,0 +1,16 @@
telnet_port 4444
gdb_port 3333
source [find interface/stlink-v2.cfg]
#interface jlink
#interface stlink-v2
#adapter_khz 10000
#transport select swd
#source /usr/share/openocd/scripts/target/stm32f0x.cfg
source [find target/stm32f4x_stlink.cfg]
init
arm semihosting enable
#flash bank sysflash.alias stm32f0x 0x00000000 0 0 0 $_TARGETNAME

View file

@ -25,8 +25,6 @@
#include "usbh_lld_stm32f4.h" /// provides low level usb host driver for stm32f4 platform
#include "usbh_driver_hid.h" /// provides generic usb device driver for Human Interface Device (HID)
#include "usbh_driver_hub.h" /// provides usb full speed hub driver (Low speed devices on hub are not supported)
#include "usbh_driver_gp_xbox.h" /// provides usb device driver for Gamepad: Microsoft XBOX compatible Controller
#include "usbh_driver_ac_midi.h" /// provides usb device driver for midi class devices
// STM32f407 compatible
#include <libopencm3/stm32/rcc.h>
@ -54,13 +52,13 @@ static void clock_setup(void)
rcc_clock_setup_hse_3v3(&hse_8mhz_3v3[CLOCK_3V3_168MHZ]);
// GPIO
rcc_periph_clock_enable(RCC_GPIOA); // OTG_FS + button
rcc_periph_clock_enable(RCC_GPIOA); // USART + OTG_FS + button
rcc_periph_clock_enable(RCC_GPIOB); // OTG_HS
rcc_periph_clock_enable(RCC_GPIOC); // USART + OTG_FS charge pump
rcc_periph_clock_enable(RCC_GPIOC); // OTG_FS charge pump
rcc_periph_clock_enable(RCC_GPIOD); // LEDS
// periphery
rcc_periph_clock_enable(RCC_USART6); // USART
rcc_periph_clock_enable(RCC_USART1); // USART
rcc_periph_clock_enable(RCC_OTGFS); // OTG_FS
rcc_periph_clock_enable(RCC_OTGHS); // OTG_HS
rcc_periph_clock_enable(RCC_TIM6); // TIM6
@ -106,9 +104,9 @@ static void gpio_setup(void)
gpio_mode_setup(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO15 | GPIO14);
gpio_set_af(GPIOB, GPIO_AF12, GPIO14 | GPIO15);
// USART TX
gpio_mode_setup(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO6 | GPIO7);
gpio_set_af(GPIOC, GPIO_AF8, GPIO6 | GPIO7);
// USART
gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO9 | GPIO10);
gpio_set_af(GPIOA, GPIO_AF7, GPIO9 | GPIO10);
// button
gpio_mode_setup(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO0);
@ -117,8 +115,6 @@ static void gpio_setup(void)
static const usbh_dev_driver_t *device_drivers[] = {
&usbh_hub_driver,
&usbh_hid_driver,
&usbh_gp_xbox_driver,
&usbh_midi_driver,
NULL
};
@ -133,32 +129,6 @@ static const usbh_low_level_driver_t * const lld_drivers[] = {
NULL
};
static void gp_xbox_update(uint8_t device_id, gp_xbox_packet_t packet)
{
(void)device_id;
(void)packet;
LOG_PRINTF("update %d: %d %d \n", device_id, packet.axis_left_x, packet.buttons & GP_XBOX_BUTTON_A);
}
static void gp_xbox_connected(uint8_t device_id)
{
(void)device_id;
LOG_PRINTF("connected %d", device_id);
}
static void gp_xbox_disconnected(uint8_t device_id)
{
(void)device_id;
LOG_PRINTF("disconnected %d", device_id);
}
static const gp_xbox_config_t gp_xbox_config = {
.update = &gp_xbox_update,
.notify_connected = &gp_xbox_connected,
.notify_disconnected = &gp_xbox_disconnected
};
static void hid_in_message_handler(uint8_t device_id, const uint8_t *data, uint32_t length)
{
(void)device_id;
@ -171,6 +141,7 @@ static void hid_in_message_handler(uint8_t device_id, const uint8_t *data, uint3
// print only first 4 bytes, since every mouse should have at least these four set.
// Report descriptors are not read by driver for now, so we do not know what each byte means
LOG_PRINTF("HID EVENT %02X %02X %02X %02X \n", data[0], data[1], data[2], data[3]);
/*
if (hid_get_type(device_id) == HID_TYPE_KEYBOARD) {
static int x = 0;
if (x != data[2]) {
@ -178,33 +149,13 @@ static void hid_in_message_handler(uint8_t device_id, const uint8_t *data, uint3
hid_set_report(device_id, x);
}
}
*/
}
static const hid_config_t hid_config = {
.hid_in_message_handler = &hid_in_message_handler
};
static void midi_in_message_handler(int device_id, uint8_t *data)
{
(void)device_id;
switch (data[1]>>4) {
case 8:
LOG_PRINTF("\r\nNote Off");
break;
case 9:
LOG_PRINTF("\r\nNote On");
break;
default:
break;
}
}
const midi_config_t midi_config = {
.read_callback = &midi_in_message_handler
};
int main(void)
{
clock_setup();
@ -214,7 +165,8 @@ int main(void)
tim6_setup();
#ifdef USART_DEBUG
usart_init(USART6, 921600);
//USART_BRR(USART1) = rcc_apb2_frequency / (16 * 1000000);
usart_init(USART1, 1000000);
#endif
LOG_PRINTF("\n\n\n\n\n###################\nInit\n");
@ -225,8 +177,6 @@ int main(void)
*/
hid_driver_init(&hid_config);
hub_driver_init();
gp_xbox_driver_init(&gp_xbox_config);
midi_driver_init(&midi_config);
gpio_set(GPIOD, GPIO13);
/**