1 | #include "ch.h"
|
2 | #include "hal.h"
|
3 |
|
4 | static THD_WORKING_AREA(waThread1, 128);
|
5 | static THD_FUNCTION(Thread1, arg) {
|
6 |
|
7 | (void)arg;
|
8 | chRegSetThreadName("blinker");
|
9 | while (true) {
|
10 | palTogglePad(GPIOD, GPIOD_LED3);
|
11 | palTogglePad(GPIOD, GPIOD_LED4);
|
12 | palTogglePad(GPIOD, GPIOD_LED5);
|
13 | palTogglePad(GPIOD, GPIOD_LED6);
|
14 |
|
15 | chThdSleepMilliseconds(500);
|
16 | }
|
17 | }
|
18 |
|
19 | static PWMConfig pwm1cfg = {
|
20 | 8000000, /* 8MHz PWM clock frequency. */
|
21 | US2ST(20), /* PWM period 20us. */
|
22 | NULL,
|
23 | {
|
24 | {PWM_OUTPUT_ACTIVE_HIGH | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, /* PWM1, CH1 */
|
25 | {PWM_OUTPUT_ACTIVE_HIGH | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, /* PWM1, CH2 */
|
26 | {PWM_OUTPUT_ACTIVE_HIGH | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, /* PWM1, CH3 */
|
27 | {PWM_OUTPUT_DISABLED, NULL}
|
28 | },
|
29 | 0,
|
30 | 0
|
31 | };
|
32 |
|
33 | int main(void) {
|
34 |
|
35 | halInit();
|
36 | chSysInit();
|
37 |
|
38 | pwmStart(&PWMD1, &pwm1cfg);
|
39 |
|
40 | palSetPadMode(GPIOA, 8, PAL_MODE_ALTERNATE(1));
|
41 | palSetPadMode(GPIOA, 9, PAL_MODE_ALTERNATE(1));
|
42 | palSetPadMode(GPIOA, 10, PAL_MODE_ALTERNATE(1));
|
43 | palSetPadMode(GPIOB, 13, PAL_MODE_ALTERNATE(1));
|
44 | palSetPadMode(GPIOB, 14, PAL_MODE_ALTERNATE(1));
|
45 | palSetPadMode(GPIOB, 15, PAL_MODE_ALTERNATE(1));
|
46 |
|
47 | pwmEnableChannel(&PWMD1, 1, PWM_PERCENTAGE_TO_WIDTH (&PWMD1, 1000));
|
48 | pwmEnableChannel(&PWMD1, 1, PWM_PERCENTAGE_TO_WIDTH (&PWMD1, 7000));
|
49 | pwmEnableChannel(&PWMD1, 2, PWM_PERCENTAGE_TO_WIDTH (&PWMD1, 7000));
|
50 |
|
51 | /*
|
52 | * Activates the serial driver 2 using the driver default configuration.
|
53 | * PA2(TX) and PA3(RX) are routed to USART2.
|
54 | */
|
55 | sdStart(&SD2, NULL);
|
56 | palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7));
|
57 | palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7));
|
58 |
|
59 | chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
|
60 |
|
61 | while (true) {
|
62 | sdWrite(&SD2, (uint8_t *)"Hallo\n", 6);
|
63 | if (palReadPad(GPIOA, GPIOA_BUTTON))
|
64 | sdWrite(&SD2, (uint8_t *)"Press\n", 6);
|
65 | chThdSleepMilliseconds(500);
|
66 | }
|
67 | }
|