Merge remote-tracking branch 'gsmcmullin/master'.
This commit is contained in:
@@ -1,38 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2010 Piotr Esden-Tempski <piotr@esden.net>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: lm3s3748-evb
|
||||
|
||||
lm3s3748-evb:
|
||||
@printf " BUILD examples/lm3s/lm3s3748-evb\n"
|
||||
$(Q)$(MAKE) -C lm3s3748-evb
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/lm3s/lm3s3748-evb\n"
|
||||
$(Q)$(MAKE) -C lm3s3748-evb clean
|
||||
|
||||
.PHONY: lm3s3748-evb clean
|
||||
|
||||
@@ -28,7 +28,7 @@ OBJDUMP = $(PREFIX)-objdump
|
||||
# TOOLCHAIN_DIR = `dirname \`which $(CC)\``/../$(PREFIX)
|
||||
TOOLCHAIN_DIR = ../../../..
|
||||
CFLAGS += -O0 -g3 -Wall -Wextra -I$(TOOLCHAIN_DIR)/include -fno-common \
|
||||
-mcpu=cortex-m3 -mthumb
|
||||
-mcpu=cortex-m3 -mthumb -MD
|
||||
LDSCRIPT = $(BINARY).ld
|
||||
LDFLAGS += -L$(TOOLCHAIN_DIR)/lib -L$(TOOLCHAIN_DIR)/lib/lm3s \
|
||||
-T$(LDSCRIPT) -nostartfiles -Wl,--gc-sections
|
||||
@@ -75,7 +75,7 @@ flash: $(BINARY).flash
|
||||
@#printf " OBJDUMP $(*).list\n"
|
||||
$(Q)$(OBJDUMP) -S $(*).elf > $(*).list
|
||||
|
||||
%.elf: $(OBJS) $(LDSCRIPT)
|
||||
%.elf: $(OBJS) $(LDSCRIPT) $(TOOLCHAIN_DIR)/lib/lm3s/libopencm3_lm3s.a
|
||||
@#printf " LD $(subst $(shell pwd)/,,$(@))\n"
|
||||
$(Q)$(LD) $(LDFLAGS) -o $(*).elf $(OBJS) -lopencm3_lm3s
|
||||
|
||||
@@ -85,6 +85,7 @@ flash: $(BINARY).flash
|
||||
|
||||
clean:
|
||||
$(Q)rm -f *.o
|
||||
$(Q)rm -f *.d
|
||||
$(Q)rm -f *.elf
|
||||
$(Q)rm -f *.bin
|
||||
$(Q)rm -f *.hex
|
||||
@@ -119,3 +120,5 @@ endif
|
||||
|
||||
.PHONY: images clean
|
||||
|
||||
-include $(OBJS:.o=.d)
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: miniblink
|
||||
|
||||
miniblink:
|
||||
@printf " BUILD examples/lm3s/lm3s3748-evb/miniblink\n"
|
||||
$(Q)$(MAKE) -C miniblink
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/lm3s/lm3s3748-evb/miniblink\n"
|
||||
$(Q)$(MAKE) -C miniblink clean
|
||||
|
||||
.PHONY: miniblink clean
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2010 Piotr Esden-Tempski <piotr@esden.net>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: lpc-p1343
|
||||
|
||||
lpc-p1343:
|
||||
@printf " BUILD examples/lpc13xx/lpc-p1343\n"
|
||||
$(Q)$(MAKE) -C lpc-p1343
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/lpc13xx/lpc-p1343\n"
|
||||
$(Q)$(MAKE) -C lpc-p1343 clean
|
||||
|
||||
.PHONY: lpc-p1343 clean
|
||||
|
||||
@@ -28,7 +28,7 @@ OBJDUMP = $(PREFIX)-objdump
|
||||
# TOOLCHAIN_DIR = `dirname \`which $(CC)\``/../$(PREFIX)
|
||||
TOOLCHAIN_DIR = ../../../..
|
||||
CFLAGS += -Os -g -Wall -Wextra -I$(TOOLCHAIN_DIR)/include -fno-common \
|
||||
-mcpu=cortex-m3 -mthumb
|
||||
-mcpu=cortex-m3 -mthumb -MD
|
||||
LDSCRIPT = $(BINARY).ld
|
||||
LDFLAGS += -L$(TOOLCHAIN_DIR)/lib -L$(TOOLCHAIN_DIR)/lib/lpc13xx \
|
||||
-T$(LDSCRIPT) -nostartfiles -Wl,--gc-sections
|
||||
@@ -75,7 +75,7 @@ flash: $(BINARY).flash
|
||||
@#printf " OBJDUMP $(*).list\n"
|
||||
$(Q)$(OBJDUMP) -S $(*).elf > $(*).list
|
||||
|
||||
%.elf: $(OBJS) $(LDSCRIPT)
|
||||
%.elf: $(OBJS) $(LDSCRIPT) $(TOOLCHAIN_DIR)/lib/lpc13xx/libopencm3_lpc13xx.a
|
||||
@#printf " LD $(subst $(shell pwd)/,,$(@))\n"
|
||||
$(Q)$(LD) $(LDFLAGS) -o $(*).elf $(OBJS) -lopencm3_lpc13xx
|
||||
|
||||
@@ -85,6 +85,7 @@ flash: $(BINARY).flash
|
||||
|
||||
clean:
|
||||
$(Q)rm -f *.o
|
||||
$(Q)rm -f *.d
|
||||
$(Q)rm -f *.elf
|
||||
$(Q)rm -f *.bin
|
||||
$(Q)rm -f *.hex
|
||||
@@ -119,3 +120,5 @@ endif
|
||||
|
||||
.PHONY: images clean
|
||||
|
||||
-include $(OBJS:.o=.d)
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: miniblink
|
||||
|
||||
miniblink:
|
||||
@printf " BUILD examples/lpc13xx/lpc-p1343/miniblink\n"
|
||||
$(Q)$(MAKE) -C miniblink
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/lpc13xx/lpc-p1343/miniblink\n"
|
||||
$(Q)$(MAKE) -C miniblink clean
|
||||
|
||||
.PHONY: miniblink clean
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2010 Piotr Esden-Tempski <piotr@esden.net>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: stm32-discovery stm32-h103 stm32-h107 mb525 lisa-m obldc other
|
||||
|
||||
stm32-discovery:
|
||||
@printf " BUILD examples/stm32/stm32-discovery\n"
|
||||
$(Q)$(MAKE) -C stm32-discovery
|
||||
|
||||
stm32-h103:
|
||||
@printf " BUILD examples/stm32/stm32-h103\n"
|
||||
$(Q)$(MAKE) -C stm32-h103
|
||||
|
||||
stm32-h107:
|
||||
@printf " BUILD examples/stm32/stm32-h107\n"
|
||||
$(Q)$(MAKE) -C stm32-h107
|
||||
|
||||
mb525:
|
||||
@printf " BUILD examples/stm32/mb525\n"
|
||||
$(Q)$(MAKE) -C mb525
|
||||
|
||||
lisa-m:
|
||||
@printf " BUILD examples/stm32/lisa-m\n"
|
||||
$(Q)$(MAKE) -C lisa-m
|
||||
|
||||
other:
|
||||
@printf " BUILD examples/stm32/other\n"
|
||||
$(Q)$(MAKE) -C other
|
||||
|
||||
obldc:
|
||||
@printf " BUILD examples/stm32/obldc\n"
|
||||
$(Q)$(MAKE) -C obldc
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/stm32/stm32-discovery\n"
|
||||
$(Q)$(MAKE) -C stm32-discovery clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103\n"
|
||||
$(Q)$(MAKE) -C stm32-h103 clean
|
||||
@printf " CLEAN examples/stm32/stm32-h107\n"
|
||||
$(Q)$(MAKE) -C stm32-h107 clean
|
||||
@printf " CLEAN examples/stm32/mb525\n"
|
||||
$(Q)$(MAKE) -C mb525 clean
|
||||
@printf " CLEAN examples/stm32/lisa-m\n"
|
||||
$(Q)$(MAKE) -C lisa-m clean
|
||||
@printf " CLEAN examples/stm32/other\n"
|
||||
$(Q)$(MAKE) -C other clean
|
||||
@printf " CLEAN examples/stm32/obldc\n"
|
||||
$(Q)$(MAKE) -C obldc clean
|
||||
|
||||
.PHONY: stm32-discovery stm32-h103 stm32-h107 mb525 lisa-m other obldc clean
|
||||
|
||||
@@ -28,7 +28,7 @@ OBJDUMP = $(PREFIX)-objdump
|
||||
# TOOLCHAIN_DIR = `dirname \`which $(CC)\``/../$(PREFIX)
|
||||
TOOLCHAIN_DIR = ../../../..
|
||||
CFLAGS += -Os -g -Wall -Wextra -I$(TOOLCHAIN_DIR)/include \
|
||||
-fno-common -mcpu=cortex-m3 -mthumb -msoft-float
|
||||
-fno-common -mcpu=cortex-m3 -mthumb -msoft-float -MD
|
||||
LDSCRIPT = $(BINARY).ld
|
||||
LDFLAGS += -lc -lnosys -L$(TOOLCHAIN_DIR)/lib -L$(TOOLCHAIN_DIR)/lib/stm32 \
|
||||
-T$(LDSCRIPT) -nostartfiles -Wl,--gc-sections \
|
||||
@@ -75,7 +75,7 @@ flash: $(BINARY).flash
|
||||
@#printf " OBJDUMP $(*).list\n"
|
||||
$(Q)$(OBJDUMP) -S $(*).elf > $(*).list
|
||||
|
||||
%.elf: $(OBJS) $(LDSCRIPT)
|
||||
%.elf: $(OBJS) $(LDSCRIPT) $(TOOLCHAIN_DIR)/lib/stm32/libopencm3_stm32.a
|
||||
@#printf " LD $(subst $(shell pwd)/,,$(@))\n"
|
||||
$(Q)$(LD) -o $(*).elf $(OBJS) -lopencm3_stm32 $(LDFLAGS)
|
||||
|
||||
@@ -85,6 +85,7 @@ flash: $(BINARY).flash
|
||||
|
||||
clean:
|
||||
$(Q)rm -f *.o
|
||||
$(Q)rm -f *.d
|
||||
$(Q)rm -f *.elf
|
||||
$(Q)rm -f *.bin
|
||||
$(Q)rm -f *.hex
|
||||
@@ -118,3 +119,5 @@ endif
|
||||
|
||||
.PHONY: images clean
|
||||
|
||||
-include $(OBJS:.o=.d)
|
||||
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
# TODO: Add usb_dfu later, doesn't build at the moment.
|
||||
all: fancyblink usb_hid
|
||||
|
||||
fancyblink:
|
||||
@printf " BUILD examples/stm32/lisa-m/fancyblink\n"
|
||||
$(Q)$(MAKE) -C usb_hid
|
||||
|
||||
usb_hid:
|
||||
@printf " BUILD examples/stm32/lisa-m/usb_hid\n"
|
||||
$(Q)$(MAKE) -C usb_hid
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/stm32/lisa-m/usb_hid\n"
|
||||
$(Q)$(MAKE) -C usb_hid clean
|
||||
|
||||
.PHONY: fancyblink usb_hid clean
|
||||
|
||||
@@ -173,18 +173,26 @@ static void usbdfu_getstatus_complete(struct usb_setup_data *req)
|
||||
}
|
||||
}
|
||||
|
||||
static int usbdfu_control_command(struct usb_setup_data *req,
|
||||
void (**complete)(struct usb_setup_data *req))
|
||||
static int usbdfu_control_request(struct usb_setup_data *req, u8 **buf,
|
||||
u16 *len, void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
(void)complete;
|
||||
|
||||
if(req->bmRequestType != 0x21)
|
||||
if((req->bmRequestType & 0x7F) != 0x21)
|
||||
return 0; /* Only accept class request */
|
||||
|
||||
|
||||
switch(req->bRequest) {
|
||||
case DFU_DNLOAD:
|
||||
usbdfu_state = STATE_DFU_MANIFEST_SYNC;
|
||||
return 1;
|
||||
if((len == NULL) || (*len == 0)) {
|
||||
usbdfu_state = STATE_DFU_MANIFEST_SYNC;
|
||||
return 1;
|
||||
} else {
|
||||
/* Copy download data for use on GET_STATUS */
|
||||
prog.blocknum = req->wValue;
|
||||
prog.len = *len;
|
||||
memcpy(prog.buf, *buf, *len);
|
||||
usbdfu_state = STATE_DFU_DNLOAD_SYNC;
|
||||
return 1;
|
||||
}
|
||||
case DFU_CLRSTATUS:
|
||||
/* Clear error and return to dfuIDLE */
|
||||
if(usbdfu_state == STATE_DFU_ERROR)
|
||||
@@ -194,19 +202,6 @@ static int usbdfu_control_command(struct usb_setup_data *req,
|
||||
/* Abort returns to dfuIDLE state */
|
||||
usbdfu_state = STATE_DFU_IDLE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len,
|
||||
void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
|
||||
if(req->bmRequestType != 0xA1)
|
||||
return 0; /* Only accept class request */
|
||||
|
||||
switch(req->bRequest) {
|
||||
case DFU_UPLOAD:
|
||||
/* Upload not supported for now */
|
||||
return 0;
|
||||
@@ -235,26 +230,6 @@ static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbdfu_control_write(struct usb_setup_data *req, u8 *buf, u16 len,
|
||||
void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
(void)complete;
|
||||
|
||||
if(req->bmRequestType != 0x21)
|
||||
return 0; /* Only accept class request */
|
||||
|
||||
if(req->bRequest != DFU_DNLOAD)
|
||||
return 0;
|
||||
|
||||
/* Copy download data for use on GET_STATUS */
|
||||
prog.blocknum = req->wValue;
|
||||
prog.len = len;
|
||||
memcpy(prog.buf, buf, len);
|
||||
usbdfu_state = STATE_DFU_DNLOAD_SYNC;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN);
|
||||
@@ -280,11 +255,12 @@ int main(void)
|
||||
AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON;
|
||||
gpio_set_mode(GPIOA, GPIO_MODE_INPUT, 0, GPIO15);
|
||||
|
||||
usbd_init(&dev, &config, usb_strings);
|
||||
usbd_init(&stm32f103_usb_driver, &dev, &config, usb_strings);
|
||||
usbd_set_control_buffer_size(sizeof(usbd_control_buffer));
|
||||
usbd_register_control_command_callback(usbdfu_control_command);
|
||||
usbd_register_control_write_callback(usbdfu_control_write);
|
||||
usbd_register_control_read_callback(usbdfu_control_read);
|
||||
usbd_register_control_callback(
|
||||
USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
|
||||
USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
|
||||
usbdfu_control_request);
|
||||
|
||||
gpio_set(GPIOA, GPIO15);
|
||||
gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_2_MHZ,
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: fancyblink pwmleds
|
||||
|
||||
fancyblink:
|
||||
@printf " BUILD examples/stm32/mb525/fancyblink\n"
|
||||
$(Q)$(MAKE) -C fancyblink
|
||||
|
||||
pwmleds:
|
||||
@printf " BUILD examples/stm32/mb525/pwmleds\n"
|
||||
$(Q)$(MAKE) -C pwmleds
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/stm32/mb525/fancyblink\n"
|
||||
$(Q)$(MAKE) -C fancyblink clean
|
||||
@printf " CLEAN examples/stm32/mb525/pwmleds\n"
|
||||
$(Q)$(MAKE) -C pwmleds clean
|
||||
|
||||
.PHONY: fancyblink pwmleds clean
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2010 Piotr Esden-Tempski <piotr@esden.net>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: led systick usart can
|
||||
|
||||
led:
|
||||
@printf " BUILD examples/stm32/obldc/led\n"
|
||||
$(Q)$(MAKE) -C led
|
||||
|
||||
systick:
|
||||
@printf " BUILD examples/stm32/obldc/systick\n"
|
||||
$(Q)$(MAKE) -C systick
|
||||
|
||||
usart:
|
||||
@printf " BUILD examples/stm32/obldc/usart\n"
|
||||
$(Q)$(MAKE) -C usart
|
||||
|
||||
can:
|
||||
@printf " BUILD examples/stm32/obldc/can\n"
|
||||
$(Q)$(MAKE) -C can
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/stm32/obldc/led\n"
|
||||
$(Q)$(MAKE) -C led clean
|
||||
@printf " CLEAN examples/stm32/obldc/systick\n"
|
||||
$(Q)$(MAKE) -C systick clean
|
||||
@printf " CLEAN examples/stm32/obldc/usart\n"
|
||||
$(Q)$(MAKE) -C usart clean
|
||||
@printf " CLEAN examples/stm32/obldc/can\n"
|
||||
$(Q)$(MAKE) -C can clean
|
||||
|
||||
.PHONY: led systick usart can
|
||||
|
||||
@@ -80,7 +80,7 @@ void usart1_isr(void)
|
||||
static u8 data = 'A';
|
||||
|
||||
/* Check if we were called because of RXNE. */
|
||||
if (((USART_CR1(USART1) & USART_SR_RXNEIE) != 0) &&
|
||||
if (((USART_CR1(USART1) & USART_CR1_RXNEIE) != 0) &&
|
||||
((USART_SR(USART1) & USART_SR_RXNE) != 0)) {
|
||||
/* Indicate that we got data. */
|
||||
gpio_toggle(GPIOA, GPIO6);
|
||||
@@ -93,7 +93,7 @@ void usart1_isr(void)
|
||||
}
|
||||
|
||||
/* Check if we were called because of TXE. */
|
||||
if ((USART_CR1(USART1) & USART_SR_TXEIE) != 0) &&
|
||||
if (((USART_CR1(USART1) & USART_CR1_TXEIE) != 0) &&
|
||||
((USART_SR(USART1) & USART_SR_TXE) != 0)) {
|
||||
/* Indicate that we are sending out data. */
|
||||
gpio_toggle(GPIOA, GPIO7);
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2010 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: i2c_stts75_sensor adc_temperature_sensor dma_mem2mem timer_interrupt systick dogm128 rtc usb_cdcacm usb_dfu usb_hid
|
||||
|
||||
i2c_stts75_sensor:
|
||||
@printf " BUILD examples/stm32/other/i2c_stts75_sensor\n"
|
||||
$(Q)$(MAKE) -C i2c_stts75_sensor
|
||||
|
||||
adc_temperature_sensor:
|
||||
@printf " BUILD examples/stm32/other/adc_temperature_sensor\n"
|
||||
$(Q)$(MAKE) -C adc_temperature_sensor
|
||||
|
||||
dma_mem2mem:
|
||||
@printf " BUILD examples/stm32/other/dma_mem2mem\n"
|
||||
$(Q)$(MAKE) -C dma_mem2mem
|
||||
|
||||
timer_interrupt:
|
||||
@printf " BUILD examples/stm32/other/timer_interrupt\n"
|
||||
$(Q)$(MAKE) -C timer_interrupt
|
||||
|
||||
systick:
|
||||
@printf " BUILD examples/stm32/other/systick\n"
|
||||
$(Q)$(MAKE) -C systick
|
||||
|
||||
dogm128:
|
||||
@printf " BUILD examples/stm32/other/dogm128\n"
|
||||
$(Q)$(MAKE) -C dogm128
|
||||
|
||||
rtc:
|
||||
@printf " BUILD examples/stm32/other/rtc\n"
|
||||
$(Q)$(MAKE) -C rtc
|
||||
|
||||
usb_cdcacm:
|
||||
@printf " BUILD examples/stm32/other/usb_cdcacm\n"
|
||||
$(Q)$(MAKE) -C usb_cdcacm
|
||||
|
||||
usb_dfu:
|
||||
@printf " BUILD examples/stm32/other/usb_dfu\n"
|
||||
$(Q)$(MAKE) -C usb_dfu
|
||||
|
||||
usb_hid:
|
||||
@printf " BUILD examples/stm32/other/usb_hid\n"
|
||||
$(Q)$(MAKE) -C usb_hid
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/stm32/other/i2c_stts75_sensor\n"
|
||||
$(Q)$(MAKE) -C i2c_stts75_sensor clean
|
||||
@printf " CLEAN examples/stm32/other/adc_temperature_sensor\n"
|
||||
$(Q)$(MAKE) -C adc_temperature_sensor clean
|
||||
@printf " CLEAN examples/stm32/other/dma_mem2mem\n"
|
||||
$(Q)$(MAKE) -C dma_mem2mem clean
|
||||
@printf " CLEAN examples/stm32/other/timer_interrupt\n"
|
||||
$(Q)$(MAKE) -C timer_interrupt clean
|
||||
@printf " CLEAN examples/stm32/other/systick\n"
|
||||
$(Q)$(MAKE) -C systick clean
|
||||
@printf " CLEAN examples/stm32/other/dogm128\n"
|
||||
$(Q)$(MAKE) -C dogm128 clean
|
||||
@printf " CLEAN examples/stm32/other/rtc\n"
|
||||
$(Q)$(MAKE) -C rtc clean
|
||||
@printf " CLEAN examples/stm32/other/usb_cdcacm\n"
|
||||
$(Q)$(MAKE) -C usb_cdcacm clean
|
||||
@printf " CLEAN examples/stm32/other/usb_dfu\n"
|
||||
$(Q)$(MAKE) -C usb_dfu clean
|
||||
@printf " CLEAN examples/stm32/other/usb_hid\n"
|
||||
$(Q)$(MAKE) -C usb_hid clean
|
||||
|
||||
.PHONY: i2c_stts75_sensor adc_temperature_sensor dma_mem2mem timer_interrupt systick dogm128 rtc clean usb_cdcacm usb_dfu usb_hid
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: miniblink fancyblink usart button rtc
|
||||
|
||||
miniblink:
|
||||
@printf " BUILD examples/stm32/stm32-discovery/miniblink\n"
|
||||
$(Q)$(MAKE) -C miniblink
|
||||
|
||||
fancyblink:
|
||||
@printf " BUILD examples/stm32/stm32-discovery/fancyblink\n"
|
||||
$(Q)$(MAKE) -C fancyblink
|
||||
|
||||
usart:
|
||||
@printf " BUILD examples/stm32/stm32-discovery/usart\n"
|
||||
$(Q)$(MAKE) -C usart
|
||||
|
||||
button:
|
||||
@printf " BUILD examples/stm32/stm32-discovery/button\n"
|
||||
$(Q)$(MAKE) -C button
|
||||
|
||||
rtc:
|
||||
@printf " BUILD examples/stm32/stm32-discovery/rtc\n"
|
||||
$(Q)$(MAKE) -C rtc
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/stm32/stm32-discovery/miniblink\n"
|
||||
$(Q)$(MAKE) -C miniblink clean
|
||||
@printf " CLEAN examples/stm32/stm32-discovery/fancyblink\n"
|
||||
$(Q)$(MAKE) -C fancyblink clean
|
||||
@printf " CLEAN examples/stm32/stm32-discovery/usart\n"
|
||||
$(Q)$(MAKE) -C usart clean
|
||||
@printf " CLEAN examples/stm32/stm32-discovery/button\n"
|
||||
$(Q)$(MAKE) -C button clean
|
||||
@printf " CLEAN examples/stm32/stm32-discovery/rtc\n"
|
||||
$(Q)$(MAKE) -C rtc clean
|
||||
|
||||
.PHONY: miniblink fancyblink usart button rtc clean
|
||||
|
||||
@@ -1,114 +0,0 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
##
|
||||
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
|
||||
all: miniblink fancyblink usart usart_irq usart_printf usart_irq_printf timer usb_cdcacm usb_hid button exti_both traceswo led_stripe
|
||||
|
||||
miniblink:
|
||||
@printf " BUILD examples/stm32/stm32-h103/miniblink\n"
|
||||
$(Q)$(MAKE) -C miniblink
|
||||
|
||||
fancyblink:
|
||||
@printf " BUILD examples/stm32/stm32-h103/fancyblink\n"
|
||||
$(Q)$(MAKE) -C fancyblink
|
||||
|
||||
usart:
|
||||
@printf " BUILD examples/stm32/stm32-h103/usart\n"
|
||||
$(Q)$(MAKE) -C usart
|
||||
|
||||
usart_irq:
|
||||
@printf " BUILD examples/stm32/stm32-h103/usart_irq\n"
|
||||
$(Q)$(MAKE) -C usart_irq
|
||||
|
||||
usart_printf:
|
||||
@printf " BUILD examples/stm32/stm32-h103/usart_printf\n"
|
||||
$(Q)$(MAKE) -C usart_printf
|
||||
|
||||
usart_irq_printf:
|
||||
@printf " BUILD examples/stm32/stm32-h103/usart_irq_printf\n"
|
||||
$(Q)$(MAKE) -C usart_irq_printf
|
||||
|
||||
timer:
|
||||
@printf " BUILD examples/stm32/stm32-h103/timer\n"
|
||||
$(Q)$(MAKE) -C timer
|
||||
|
||||
spi:
|
||||
@printf " BUILD examples/stm32/stm32-h103/spi\n"
|
||||
$(Q)$(MAKE) -C spi
|
||||
|
||||
usb_cdcacm:
|
||||
@printf " BUILD examples/stm32/stm32-h103/usb_cdcacm\n"
|
||||
$(Q)$(MAKE) -C usb_cdcacm
|
||||
|
||||
usb_hid:
|
||||
@printf " BUILD examples/stm32/stm32-h103/usb_hid\n"
|
||||
$(Q)$(MAKE) -C usb_hid
|
||||
|
||||
button:
|
||||
@printf " BUILD examples/stm32/stm32-h103/button\n"
|
||||
$(Q)$(MAKE) -C button
|
||||
|
||||
exti_both:
|
||||
@printf " BUILD examples/stm32/stm32-h103/exti_both\n"
|
||||
$(Q)$(MAKE) -C exti_both
|
||||
|
||||
traceswo:
|
||||
@printf " BUILD examples/stm32/stm32-h103/traceswo\n"
|
||||
$(Q)$(MAKE) -C traceswo
|
||||
|
||||
led_stripe:
|
||||
@printf " BUILD examples/stm32/stm32-h103/led_stripe\n"
|
||||
$(Q)$(MAKE) -C led_stripe
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/stm32/stm32-h103/miniblink\n"
|
||||
$(Q)$(MAKE) -C miniblink clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/fancyblink\n"
|
||||
$(Q)$(MAKE) -C fancyblink clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/usart\n"
|
||||
$(Q)$(MAKE) -C usart clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/usart_irq\n"
|
||||
$(Q)$(MAKE) -C usart_irq clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/usart_printf\n"
|
||||
$(Q)$(MAKE) -C usart_printf clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/usart_irq_printf\n"
|
||||
$(Q)$(MAKE) -C usart_irq_printf clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/spi\n"
|
||||
$(Q)$(MAKE) -C spi clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/usb_cdcacm\n"
|
||||
$(Q)$(MAKE) -C usb_cdcacm clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/usb_hid\n"
|
||||
$(Q)$(MAKE) -C usb_hid clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/button\n"
|
||||
$(Q)$(MAKE) -C button clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/exti_both\n"
|
||||
$(Q)$(MAKE) -C exti_both clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/traceswo\n"
|
||||
$(Q)$(MAKE) -C traceswo clean
|
||||
@printf " CLEAN examples/stm32/stm32-h103/led_stripe\n"
|
||||
$(Q)$(MAKE) -C led_stripe clean
|
||||
|
||||
.PHONY: miniblink fancyblink usart usart_irq usart_printf usart_irq_printf timer spi usb_cdcacm usb_hid button exti_both traceswo led_stripe clean
|
||||
|
||||
@@ -173,18 +173,26 @@ static void usbdfu_getstatus_complete(struct usb_setup_data *req)
|
||||
}
|
||||
}
|
||||
|
||||
static int usbdfu_control_command(struct usb_setup_data *req,
|
||||
void (**complete)(struct usb_setup_data *req))
|
||||
static int usbdfu_control_request(struct usb_setup_data *req, u8 **buf,
|
||||
u16 *len, void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
(void)complete;
|
||||
|
||||
if(req->bmRequestType != 0x21)
|
||||
if((req->bmRequestType & 0x7F) != 0x21)
|
||||
return 0; /* Only accept class request */
|
||||
|
||||
|
||||
switch(req->bRequest) {
|
||||
case DFU_DNLOAD:
|
||||
usbdfu_state = STATE_DFU_MANIFEST_SYNC;
|
||||
return 1;
|
||||
if((len == NULL) || (*len == 0)) {
|
||||
usbdfu_state = STATE_DFU_MANIFEST_SYNC;
|
||||
return 1;
|
||||
} else {
|
||||
/* Copy download data for use on GET_STATUS */
|
||||
prog.blocknum = req->wValue;
|
||||
prog.len = *len;
|
||||
memcpy(prog.buf, *buf, *len);
|
||||
usbdfu_state = STATE_DFU_DNLOAD_SYNC;
|
||||
return 1;
|
||||
}
|
||||
case DFU_CLRSTATUS:
|
||||
/* Clear error and return to dfuIDLE */
|
||||
if(usbdfu_state == STATE_DFU_ERROR)
|
||||
@@ -194,19 +202,6 @@ static int usbdfu_control_command(struct usb_setup_data *req,
|
||||
/* Abort returns to dfuIDLE state */
|
||||
usbdfu_state = STATE_DFU_IDLE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len,
|
||||
void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
|
||||
if(req->bmRequestType != 0xA1)
|
||||
return 0; /* Only accept class request */
|
||||
|
||||
switch(req->bRequest) {
|
||||
case DFU_UPLOAD:
|
||||
/* Upload not supported for now */
|
||||
return 0;
|
||||
@@ -235,26 +230,6 @@ static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbdfu_control_write(struct usb_setup_data *req, u8 *buf, u16 len,
|
||||
void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
(void)complete;
|
||||
|
||||
if(req->bmRequestType != 0x21)
|
||||
return 0; /* Only accept class request */
|
||||
|
||||
if(req->bRequest != DFU_DNLOAD)
|
||||
return 0;
|
||||
|
||||
/* Copy download data for use on GET_STATUS */
|
||||
prog.blocknum = req->wValue;
|
||||
prog.len = len;
|
||||
memcpy(prog.buf, buf, len);
|
||||
usbdfu_state = STATE_DFU_DNLOAD_SYNC;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN);
|
||||
@@ -280,11 +255,12 @@ int main(void)
|
||||
AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON;
|
||||
gpio_set_mode(GPIOA, GPIO_MODE_INPUT, 0, GPIO15);
|
||||
|
||||
usbd_init(&dev, &config, usb_strings);
|
||||
usbd_init(&stm32f103_usb_driver, &dev, &config, usb_strings);
|
||||
usbd_set_control_buffer_size(sizeof(usbd_control_buffer));
|
||||
usbd_register_control_command_callback(usbdfu_control_command);
|
||||
usbd_register_control_write_callback(usbdfu_control_write);
|
||||
usbd_register_control_read_callback(usbdfu_control_read);
|
||||
usbd_register_control_callback(
|
||||
USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
|
||||
USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
|
||||
usbdfu_control_request);
|
||||
|
||||
gpio_set(GPIOA, GPIO15);
|
||||
gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_2_MHZ,
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
|
||||
BINARY = usbiap
|
||||
|
||||
include ../../Makefile.includes
|
||||
include ../../Makefile.include
|
||||
|
||||
|
||||
@@ -173,18 +173,26 @@ static void usbdfu_getstatus_complete(struct usb_setup_data *req)
|
||||
}
|
||||
}
|
||||
|
||||
static int usbdfu_control_command(struct usb_setup_data *req,
|
||||
void (**complete)(struct usb_setup_data *req))
|
||||
static int usbdfu_control_request(struct usb_setup_data *req, u8 **buf,
|
||||
u16 *len, void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
(void)complete;
|
||||
|
||||
if(req->bmRequestType != 0x21)
|
||||
if((req->bmRequestType & 0x7F) != 0x21)
|
||||
return 0; /* Only accept class request */
|
||||
|
||||
|
||||
switch(req->bRequest) {
|
||||
case DFU_DNLOAD:
|
||||
usbdfu_state = STATE_DFU_MANIFEST_SYNC;
|
||||
return 1;
|
||||
if((len == NULL) || (*len == 0)) {
|
||||
usbdfu_state = STATE_DFU_MANIFEST_SYNC;
|
||||
return 1;
|
||||
} else {
|
||||
/* Copy download data for use on GET_STATUS */
|
||||
prog.blocknum = req->wValue;
|
||||
prog.len = *len;
|
||||
memcpy(prog.buf, *buf, *len);
|
||||
usbdfu_state = STATE_DFU_DNLOAD_SYNC;
|
||||
return 1;
|
||||
}
|
||||
case DFU_CLRSTATUS:
|
||||
/* Clear error and return to dfuIDLE */
|
||||
if(usbdfu_state == STATE_DFU_ERROR)
|
||||
@@ -194,19 +202,6 @@ static int usbdfu_control_command(struct usb_setup_data *req,
|
||||
/* Abort returns to dfuIDLE state */
|
||||
usbdfu_state = STATE_DFU_IDLE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len,
|
||||
void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
|
||||
if(req->bmRequestType != 0xA1)
|
||||
return 0; /* Only accept class request */
|
||||
|
||||
switch(req->bRequest) {
|
||||
case DFU_UPLOAD:
|
||||
/* Upload not supported for now */
|
||||
return 0;
|
||||
@@ -235,26 +230,6 @@ static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbdfu_control_write(struct usb_setup_data *req, u8 *buf, u16 len,
|
||||
void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
(void)complete;
|
||||
|
||||
if(req->bmRequestType != 0x21)
|
||||
return 0; /* Only accept class request */
|
||||
|
||||
if(req->bRequest != DFU_DNLOAD)
|
||||
return 0;
|
||||
|
||||
/* Copy download data for use on GET_STATUS */
|
||||
prog.blocknum = req->wValue;
|
||||
prog.len = len;
|
||||
memcpy(prog.buf, buf, len);
|
||||
usbdfu_state = STATE_DFU_DNLOAD_SYNC;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN);
|
||||
@@ -280,11 +255,12 @@ int main(void)
|
||||
AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON;
|
||||
gpio_set_mode(GPIOA, GPIO_MODE_INPUT, 0, GPIO15);
|
||||
|
||||
usbd_init(&dev, &config, usb_strings);
|
||||
usbd_init(&stm32f103_usb_driver, &dev, &config, usb_strings);
|
||||
usbd_set_control_buffer_size(sizeof(usbd_control_buffer));
|
||||
usbd_register_control_command_callback(usbdfu_control_command);
|
||||
usbd_register_control_write_callback(usbdfu_control_write);
|
||||
usbd_register_control_read_callback(usbdfu_control_read);
|
||||
usbd_register_control_callback(
|
||||
USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
|
||||
USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
|
||||
usbdfu_control_request);
|
||||
|
||||
gpio_set(GPIOA, GPIO15);
|
||||
gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_2_MHZ,
|
||||
|
||||
@@ -17,22 +17,7 @@
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||
ifneq ($(V),1)
|
||||
Q := @
|
||||
# Do not print "Entering directory ...".
|
||||
MAKEFLAGS += --no-print-directory
|
||||
endif
|
||||
BINARY = usb_simple
|
||||
|
||||
all: fancyblink
|
||||
|
||||
fancyblink:
|
||||
@printf " BUILD examples/stm32/stm32-h107/fancyblink\n"
|
||||
$(Q)$(MAKE) -C fancyblink
|
||||
|
||||
clean:
|
||||
@printf " CLEAN examples/stm32/stm32-h107/fancyblink\n"
|
||||
$(Q)$(MAKE) -C fancyblink clean
|
||||
|
||||
.PHONY: fancyblink
|
||||
include ../../Makefile.include
|
||||
|
||||
10
examples/stm32/stm32-h107/usb_simple/README
Normal file
10
examples/stm32/stm32-h107/usb_simple/README
Normal file
@@ -0,0 +1,10 @@
|
||||
------------------------------------------------------------------------------
|
||||
README
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
This is small USB controlled LED blinking example program using libopencm3.
|
||||
|
||||
It's intended for the ST STM32-based Olimex STM32-H107 eval board (see
|
||||
http://olimex.com/dev/stm32-h107.html for details). The usbtest.py
|
||||
script in this directory maybe used to control the LED.
|
||||
|
||||
118
examples/stm32/stm32-h107/usb_simple/usb_simple.c
Normal file
118
examples/stm32/stm32-h107/usb_simple/usb_simple.c
Normal file
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2011 Gareth McMullin <gareth@blacksphere.co.nz>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <libopencm3/stm32/rcc.h>
|
||||
#include <libopencm3/stm32/gpio.h>
|
||||
|
||||
#include <libopencm3/usb/usbd.h>
|
||||
|
||||
const struct usb_device_descriptor dev = {
|
||||
.bLength = USB_DT_DEVICE_SIZE,
|
||||
.bDescriptorType = USB_DT_DEVICE,
|
||||
.bcdUSB = 0x0200,
|
||||
.bDeviceClass = 0xFF,
|
||||
.bDeviceSubClass = 0,
|
||||
.bDeviceProtocol = 0,
|
||||
.bMaxPacketSize0 = 64,
|
||||
.idVendor = 0xCAFE,
|
||||
.idProduct = 0xCAFE,
|
||||
.bcdDevice = 0x0200,
|
||||
.iManufacturer = 1,
|
||||
.iProduct = 2,
|
||||
.iSerialNumber = 3,
|
||||
.bNumConfigurations = 1,
|
||||
};
|
||||
|
||||
const struct usb_interface_descriptor iface = {
|
||||
.bLength = USB_DT_INTERFACE_SIZE,
|
||||
.bDescriptorType = USB_DT_INTERFACE,
|
||||
.bInterfaceNumber = 0,
|
||||
.bAlternateSetting = 0,
|
||||
.bNumEndpoints = 0,
|
||||
.bInterfaceClass = 0xFF,
|
||||
.bInterfaceSubClass = 0,
|
||||
.bInterfaceProtocol = 0,
|
||||
.iInterface = 0,
|
||||
};
|
||||
|
||||
const struct usb_interface ifaces[] = {{
|
||||
.num_altsetting = 1,
|
||||
.altsetting = &iface,
|
||||
}};
|
||||
|
||||
const struct usb_config_descriptor config = {
|
||||
.bLength = USB_DT_CONFIGURATION_SIZE,
|
||||
.bDescriptorType = USB_DT_CONFIGURATION,
|
||||
.wTotalLength = 0,
|
||||
.bNumInterfaces = 1,
|
||||
.bConfigurationValue = 1,
|
||||
.iConfiguration = 0,
|
||||
.bmAttributes = 0x80,
|
||||
.bMaxPower = 0x32,
|
||||
|
||||
.interface = ifaces,
|
||||
};
|
||||
|
||||
const char *usb_strings[] = {
|
||||
"x",
|
||||
"Black Sphere Technologies",
|
||||
"Simple Device",
|
||||
"1001"
|
||||
};
|
||||
|
||||
static int simple_control_callback(struct usb_setup_data *req, u8 **buf,
|
||||
u16 *len, void (**complete)(struct usb_setup_data *req))
|
||||
{
|
||||
(void)buf;
|
||||
(void)len;
|
||||
(void)complete;
|
||||
|
||||
if(req->bmRequestType != 0x40)
|
||||
return 0; /* Only accept vendor request */
|
||||
|
||||
if(req->wValue & 1)
|
||||
gpio_set(GPIOC, GPIO6);
|
||||
else
|
||||
gpio_clear(GPIOC, GPIO6);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
rcc_clock_setup_in_hse_8mhz_out_72mhz();
|
||||
|
||||
rcc_peripheral_enable_clock(&RCC_AHBENR, RCC_AHBENR_OTGFSEN);
|
||||
rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN);
|
||||
rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPCEN);
|
||||
|
||||
/* LED output */
|
||||
gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_2_MHZ,
|
||||
GPIO_CNF_OUTPUT_PUSHPULL, GPIO6);
|
||||
|
||||
usbd_init(&stm32f107_usb_driver, &dev, &config, usb_strings);
|
||||
usbd_register_control_callback(
|
||||
USB_REQ_TYPE_VENDOR,
|
||||
USB_REQ_TYPE_TYPE,
|
||||
simple_control_callback);
|
||||
|
||||
while (1)
|
||||
usbd_poll();
|
||||
}
|
||||
|
||||
31
examples/stm32/stm32-h107/usb_simple/usb_simple.ld
Normal file
31
examples/stm32/stm32-h107/usb_simple/usb_simple.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for Olimex STM32-H107 (STM32F107VCT6, 256K flash, 64K RAM). */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 256K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32.ld
|
||||
|
||||
Reference in New Issue
Block a user