led control
This commit is contained in:
32
my_src/counter.c
Normal file
32
my_src/counter.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* counter.c
|
||||
*
|
||||
* Created on: Jan 17, 2018
|
||||
* Author: wn
|
||||
*/
|
||||
|
||||
#include "counter.h"
|
||||
#include "stm32f1xx_hal.h"
|
||||
#include <PontCoopScheduler.h>
|
||||
#include <diag/Trace.h>
|
||||
|
||||
extern TIM_HandleTypeDef htim2;
|
||||
extern TIM_HandleTypeDef htim1;
|
||||
|
||||
|
||||
void counterExec(void *handle) {
|
||||
trace_printf("counterExec\n");
|
||||
|
||||
volatile uint32_t cnt = __HAL_TIM_GET_COUNTER(&htim2);
|
||||
trace_printf("%d\n", cnt);
|
||||
|
||||
}
|
||||
|
||||
void counterInit() {
|
||||
HAL_TIM_Base_Start(&htim2);
|
||||
|
||||
schAdd(counterExec, NULL, 0, 100);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
14
my_src/counter.h
Normal file
14
my_src/counter.h
Normal file
@ -0,0 +1,14 @@
|
||||
/*
|
||||
* counter.h
|
||||
*
|
||||
* Created on: Jan 17, 2018
|
||||
* Author: wn
|
||||
*/
|
||||
|
||||
#ifndef COUNTER_H_
|
||||
#define COUNTER_H_
|
||||
|
||||
void counterInit();
|
||||
|
||||
|
||||
#endif /* COUNTER_H_ */
|
83
my_src/led.c
Normal file
83
my_src/led.c
Normal file
@ -0,0 +1,83 @@
|
||||
/*
|
||||
* led.c
|
||||
*
|
||||
* Created on: Jan 18, 2018
|
||||
* Author: wn
|
||||
*/
|
||||
|
||||
#include "led.h"
|
||||
#include "stm32f1xx_hal.h"
|
||||
#include <PontCoopScheduler.h>
|
||||
#include <diag/Trace.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef enum { LED_ON, LED_OFF, LED_BLINK } eLedCmd;
|
||||
|
||||
typedef struct {
|
||||
eLedCmd cmdRed;
|
||||
bool stateRed;
|
||||
eLedCmd cmdGreen;
|
||||
bool stateGreen;
|
||||
} tLedHandle;
|
||||
|
||||
tLedHandle ledHandle = { .cmdRed = LED_OFF, .stateRed = false, .cmdGreen = LED_OFF, .stateGreen = false };
|
||||
|
||||
void ledExec(void *handle) {
|
||||
tLedHandle *lLedHandle = (tLedHandle*) handle;
|
||||
|
||||
if ((lLedHandle->cmdRed == LED_OFF) && (lLedHandle->stateRed)) {
|
||||
HAL_GPIO_WritePin(GPIOC, ERROR_Pin, GPIO_PIN_RESET);
|
||||
lLedHandle->stateRed = false;
|
||||
}
|
||||
|
||||
if ((lLedHandle->cmdRed == LED_ON) && (! lLedHandle->stateRed)) {
|
||||
HAL_GPIO_WritePin(GPIOC, ERROR_Pin, GPIO_PIN_SET);
|
||||
lLedHandle->stateRed = true;
|
||||
}
|
||||
|
||||
if (lLedHandle->cmdRed == LED_BLINK) {
|
||||
HAL_GPIO_TogglePin(GPIOC, ERROR_Pin);
|
||||
lLedHandle->stateRed = true;
|
||||
}
|
||||
|
||||
if ((lLedHandle->cmdGreen == LED_OFF) && (lLedHandle->stateGreen)) {
|
||||
HAL_GPIO_WritePin(GPIOC, LED2_Pin, GPIO_PIN_RESET);
|
||||
lLedHandle->stateGreen = false;
|
||||
}
|
||||
|
||||
if ((lLedHandle->cmdGreen == LED_ON) && (! lLedHandle->stateGreen)) {
|
||||
HAL_GPIO_WritePin(GPIOC, LED2_Pin, GPIO_PIN_SET);
|
||||
lLedHandle->stateGreen = true;
|
||||
}
|
||||
|
||||
if (lLedHandle->cmdGreen == LED_BLINK) {
|
||||
HAL_GPIO_TogglePin(GPIOC, LED2_Pin);
|
||||
lLedHandle->stateGreen = true;
|
||||
}
|
||||
}
|
||||
|
||||
void ledGreenOn() {
|
||||
ledHandle.cmdGreen = LED_ON;
|
||||
}
|
||||
void ledGreenOff() {
|
||||
ledHandle.cmdGreen = LED_OFF;
|
||||
}
|
||||
void ledGreenBlink() {
|
||||
ledHandle.cmdGreen = LED_BLINK;
|
||||
}
|
||||
void ledRedOn() {
|
||||
ledHandle.cmdRed = LED_ON;
|
||||
}
|
||||
void ledRedOff() {
|
||||
ledHandle.cmdRed = LED_OFF;
|
||||
}
|
||||
void ledRedBlink() {
|
||||
ledHandle.cmdRed = LED_BLINK;
|
||||
}
|
||||
|
||||
|
||||
void ledInit() {
|
||||
schAdd(ledExec, &ledHandle, 0, 100);
|
||||
HAL_GPIO_WritePin(GPIOC, ERROR_Pin|LED2_Pin, GPIO_PIN_RESET);
|
||||
}
|
||||
|
23
my_src/led.h
Normal file
23
my_src/led.h
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* led.h
|
||||
*
|
||||
* Created on: Jan 18, 2018
|
||||
* Author: wn
|
||||
*/
|
||||
|
||||
#ifndef LED_H_
|
||||
#define LED_H_
|
||||
|
||||
|
||||
void ledInit();
|
||||
|
||||
void ledGreenOn();
|
||||
void ledGreenOff();
|
||||
void ledGreenBlink();
|
||||
void ledRedOn();
|
||||
void ledRedOff();
|
||||
void ledRedBlink();
|
||||
|
||||
|
||||
|
||||
#endif /* LED_H_ */
|
@ -22,6 +22,8 @@
|
||||
|
||||
#include "blinky.h"
|
||||
#include "pwm.h"
|
||||
#include "counter.h"
|
||||
#include "led.h"
|
||||
|
||||
|
||||
void my_setup_1() {
|
||||
@ -44,6 +46,11 @@ void my_errorHandler() {
|
||||
void my_setup_2() {
|
||||
blinkyInit();
|
||||
pwmInit();
|
||||
counterInit();
|
||||
ledInit();
|
||||
|
||||
ledGreenOff();
|
||||
ledRedBlink();
|
||||
}
|
||||
|
||||
|
||||
|
37
my_src/pwm.c
37
my_src/pwm.c
@ -13,27 +13,36 @@
|
||||
extern TIM_HandleTypeDef htim3;
|
||||
|
||||
|
||||
void pwmExec(void *handle) {
|
||||
const int32_t PWM_MAX = 10000;
|
||||
const int32_t PWM_STEP = 200;
|
||||
|
||||
typedef struct {
|
||||
int32_t value;
|
||||
int32_t direction;
|
||||
} tPwmHandle;
|
||||
|
||||
tPwmHandle pwmHandle = { .value = 0, .direction = 1 };
|
||||
|
||||
void pwmExec(void *handle) {
|
||||
tPwmHandle *lPwmHandle = (tPwmHandle*) handle;
|
||||
lPwmHandle->value += (PWM_STEP * lPwmHandle->direction);
|
||||
if (lPwmHandle->value >= PWM_MAX) {
|
||||
lPwmHandle->direction = -1;
|
||||
}
|
||||
if (lPwmHandle->value <= 0) {
|
||||
lPwmHandle->direction = 1;
|
||||
}
|
||||
|
||||
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, lPwmHandle->value);
|
||||
}
|
||||
|
||||
void pwmInit() {
|
||||
// schAdd(pwmExec, NULL, 0, 1000);
|
||||
schAdd(pwmExec, &pwmHandle, 0, 50);
|
||||
|
||||
__HAL_TIM_SET_AUTORELOAD(&htim3, 10000);
|
||||
__HAL_TIM_SET_AUTORELOAD(&htim3, PWM_MAX);
|
||||
|
||||
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 200);
|
||||
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 0);
|
||||
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
|
||||
|
||||
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 1000);
|
||||
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
|
||||
|
||||
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, 2000);
|
||||
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
|
||||
|
||||
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, 8000);
|
||||
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user