PWM_Pin and PWM_Pin_STM32
This commit is contained in:
@@ -85,6 +85,10 @@ void Error_Handler(void);
|
||||
#define SPI1_MISO_GPIO_Port GPIOA
|
||||
#define SPI1_MOSI_Pin GPIO_PIN_7
|
||||
#define SPI1_MOSI_GPIO_Port GPIOA
|
||||
#define DISPLAY_RESET_Pin GPIO_PIN_9
|
||||
#define DISPLAY_RESET_GPIO_Port GPIOE
|
||||
#define DISPLAY_DCRS_Pin GPIO_PIN_10
|
||||
#define DISPLAY_DCRS_GPIO_Port GPIOE
|
||||
#define DISPLAY_NSS_Pin GPIO_PIN_11
|
||||
#define DISPLAY_NSS_GPIO_Port GPIOE
|
||||
#define CLK_IN_Pin GPIO_PIN_10
|
||||
|
||||
54
Core/Inc/tim.h
Normal file
54
Core/Inc/tim.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file tim.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the tim.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2024 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __TIM_H__
|
||||
#define __TIM_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern TIM_HandleTypeDef htim10;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_TIM10_Init(void);
|
||||
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __TIM_H__ */
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
|
||||
#include "ILI9341.hpp"
|
||||
|
||||
ILI9341::ILI9341(SPI_Peripheral* hSpi, GPIO_Pin* hNssPin) :
|
||||
hSpi(hSpi), hNssPin(hNssPin) {
|
||||
ILI9341::ILI9341(SPI_Peripheral* hSpi, GPIO_Pin* hNssPin, GPIO_Pin* hResetPin, GPIO_Pin* hDcrsPin, PWM_Pin* hLedPwm) :
|
||||
hSpi(hSpi), hNssPin(hNssPin), hResetPin(hResetPin), hDcrsPin(hDcrsPin), hLedPwm(hLedPwm) {
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,16 @@ ILI9341::~ILI9341() {
|
||||
}
|
||||
|
||||
int32_t ILI9341::init() {
|
||||
// Init pins
|
||||
hNssPin->init();
|
||||
hResetPin->init();
|
||||
hDcrsPin->init();
|
||||
hLedPwm->init();
|
||||
// Reset LCD
|
||||
hResetPin->reset();
|
||||
vTaskDelay(1);
|
||||
hResetPin->set();
|
||||
|
||||
hSpi->take(100);
|
||||
hNssPin->reset();
|
||||
hSpi->transmit((uint8_t*)"Hello World", 11);
|
||||
@@ -28,5 +37,15 @@ int32_t ILI9341::init() {
|
||||
hSpi->transmit((uint8_t*)"Hello World", 11);
|
||||
hNssPin->set();
|
||||
hSpi->give();
|
||||
while(true){
|
||||
hLedPwm->setDuty(0.5);
|
||||
vTaskDelay(1000);
|
||||
hLedPwm->setDuty(1);
|
||||
vTaskDelay(1000);
|
||||
hLedPwm->setDuty(0.5);
|
||||
vTaskDelay(1000);
|
||||
hLedPwm->setDuty(0);
|
||||
vTaskDelay(1000);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -9,17 +9,23 @@
|
||||
#define SRC_COMPONENTS_ILI9341_HPP_
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <FreeRTOS.h>
|
||||
#include <task.h>
|
||||
#include "SPI_Peripheral.hpp"
|
||||
#include "GPIO_Pin.hpp"
|
||||
#include "PWM_Pin.hpp"
|
||||
|
||||
class ILI9341 {
|
||||
public:
|
||||
ILI9341(SPI_Peripheral* hSpi, GPIO_Pin* nssPin);
|
||||
ILI9341(SPI_Peripheral* hSpi, GPIO_Pin* nssPin, GPIO_Pin* hResetPin, GPIO_Pin* hDcrsPin, PWM_Pin* hLedPwm);
|
||||
virtual ~ILI9341();
|
||||
int32_t init();
|
||||
private:
|
||||
SPI_Peripheral* hSpi;
|
||||
GPIO_Pin* hNssPin;
|
||||
GPIO_Pin* hResetPin;
|
||||
GPIO_Pin* hDcrsPin;
|
||||
PWM_Pin* hLedPwm;
|
||||
};
|
||||
|
||||
#endif /* SRC_COMPONENTS_ILI9341_HPP_ */
|
||||
|
||||
20
Core/Src/Components/PWM_Pin.hpp
Normal file
20
Core/Src/Components/PWM_Pin.hpp
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* PWM_Pin.hpp
|
||||
*
|
||||
* Created on: Feb 11, 2024
|
||||
* Author: Gabriel
|
||||
*/
|
||||
|
||||
#ifndef SRC_COMPONENTS_PWM_PIN_HPP_
|
||||
#define SRC_COMPONENTS_PWM_PIN_HPP_
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
class PWM_Pin {
|
||||
public:
|
||||
virtual int32_t init() = 0;
|
||||
virtual int32_t setDuty(float dutyCycle) = 0;
|
||||
virtual int32_t setFreq(float freq) = 0;
|
||||
};
|
||||
|
||||
#endif /* SRC_COMPONENTS_PWM_PIN_HPP_ */
|
||||
40
Core/Src/Components/PWM_Pin_STM32.cpp
Normal file
40
Core/Src/Components/PWM_Pin_STM32.cpp
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* PWM_Pin_STM32.cpp
|
||||
*
|
||||
* Created on: Feb 11, 2024
|
||||
* Author: Gabriel
|
||||
*/
|
||||
|
||||
#include "PWM_Pin_STM32.hpp"
|
||||
|
||||
PWM_Pin_STM32::PWM_Pin_STM32(TIM_HandleTypeDef* hTim, uint32_t channel) :
|
||||
hTim(hTim), channel(channel){
|
||||
|
||||
}
|
||||
|
||||
PWM_Pin_STM32::~PWM_Pin_STM32() {
|
||||
|
||||
}
|
||||
|
||||
int32_t PWM_Pin_STM32::init() {
|
||||
if(HAL_TIM_PWM_Start(hTim, channel) == HAL_OK){
|
||||
return 0;
|
||||
}else{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t PWM_Pin_STM32::setDuty(float dutyCycle) {
|
||||
if(dutyCycle<0 || dutyCycle>1){
|
||||
// Invalid parameter
|
||||
return -1;
|
||||
}
|
||||
uint32_t ccr = dutyCycle*__HAL_TIM_GET_AUTORELOAD(hTim);
|
||||
__HAL_TIM_SET_COMPARE(hTim, channel, ccr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t PWM_Pin_STM32::setFreq(float freq) {
|
||||
// TODO Implement this function
|
||||
return -2;
|
||||
}
|
||||
26
Core/Src/Components/PWM_Pin_STM32.hpp
Normal file
26
Core/Src/Components/PWM_Pin_STM32.hpp
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* PWM_Pin_STM32.hpp
|
||||
*
|
||||
* Created on: Feb 11, 2024
|
||||
* Author: Gabriel
|
||||
*/
|
||||
|
||||
#ifndef SRC_COMPONENTS_PWM_PIN_STM32_HPP_
|
||||
#define SRC_COMPONENTS_PWM_PIN_STM32_HPP_
|
||||
|
||||
#include "main.h"
|
||||
#include "PWM_Pin.hpp"
|
||||
|
||||
class PWM_Pin_STM32 : public PWM_Pin {
|
||||
public:
|
||||
PWM_Pin_STM32(TIM_HandleTypeDef* hTim, uint32_t channel);
|
||||
virtual ~PWM_Pin_STM32();
|
||||
int32_t init();
|
||||
int32_t setDuty(float dutyCycle);
|
||||
int32_t setFreq(float freq);
|
||||
private:
|
||||
TIM_HandleTypeDef* hTim;
|
||||
uint32_t channel;
|
||||
};
|
||||
|
||||
#endif /* SRC_COMPONENTS_PWM_PIN_STM32_HPP_ */
|
||||
@@ -8,10 +8,12 @@
|
||||
#include "start.hpp"
|
||||
#include "GPIO_Pin_STM32.hpp"
|
||||
#include "SPI_Peripheral_STM32.hpp"
|
||||
#include "PWM_Pin_STM32.hpp"
|
||||
#include "BinLeds.hpp"
|
||||
#include "ILI9341.hpp"
|
||||
|
||||
extern SPI_HandleTypeDef hspi5;
|
||||
extern TIM_HandleTypeDef htim10;
|
||||
|
||||
GPIO_Pin_STM32 ledOrange(LD3_GPIO_Port, LD3_Pin);
|
||||
GPIO_Pin_STM32 ledGreen(LD4_GPIO_Port, LD4_Pin);
|
||||
@@ -22,7 +24,10 @@ BinLeds discoveryLeds((GPIO_Pin*[]){&ledOrange, &ledGreen, &ledRed, &ledBlue}, 4
|
||||
|
||||
SPI_Peripheral_STM32 spi_a(&hspi5, 100);
|
||||
GPIO_Pin_STM32 displayNss(DISPLAY_NSS_GPIO_Port, DISPLAY_NSS_Pin);
|
||||
ILI9341 display(&spi_a, &displayNss);
|
||||
GPIO_Pin_STM32 displayReset(DISPLAY_RESET_GPIO_Port, DISPLAY_RESET_Pin);
|
||||
GPIO_Pin_STM32 displayDcrs(DISPLAY_DCRS_GPIO_Port, DISPLAY_DCRS_Pin);
|
||||
PWM_Pin_STM32 displayLed(&htim10, TIM_CHANNEL_1);
|
||||
ILI9341 display(&spi_a, &displayNss, &displayReset, &displayDcrs, &displayLed);
|
||||
|
||||
void start(){
|
||||
spi_a.init();
|
||||
|
||||
@@ -57,13 +57,13 @@ void MX_GPIO_Init(void)
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(CS_I2C_SPI_GPIO_Port, CS_I2C_SPI_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOE, CS_I2C_SPI_Pin|DISPLAY_DCRS_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(OTG_FS_PowerSwitchOn_GPIO_Port, OTG_FS_PowerSwitchOn_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(DISPLAY_NSS_GPIO_Port, DISPLAY_NSS_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOE, DISPLAY_RESET_Pin|DISPLAY_NSS_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOD, LD4_Pin|LD3_Pin|LD5_Pin|LD6_Pin
|
||||
@@ -75,8 +75,8 @@ void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(DATA_Ready_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PEPin PEPin */
|
||||
GPIO_InitStruct.Pin = CS_I2C_SPI_Pin|DISPLAY_NSS_Pin;
|
||||
/*Configure GPIO pins : PEPin PEPin PEPin PEPin */
|
||||
GPIO_InitStruct.Pin = CS_I2C_SPI_Pin|DISPLAY_RESET_Pin|DISPLAY_DCRS_Pin|DISPLAY_NSS_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "i2c.h"
|
||||
#include "i2s.h"
|
||||
#include "spi.h"
|
||||
#include "tim.h"
|
||||
#include "gpio.h"
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
@@ -101,6 +102,7 @@ int main(void)
|
||||
MX_I2S3_Init();
|
||||
MX_SPI1_Init();
|
||||
MX_SPI5_Init();
|
||||
MX_TIM10_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
/* USER CODE END 2 */
|
||||
|
||||
132
Core/Src/tim.c
Normal file
132
Core/Src/tim.c
Normal file
@@ -0,0 +1,132 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file tim.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of the TIM instances.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2024 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "tim.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
TIM_HandleTypeDef htim10;
|
||||
|
||||
/* TIM10 init function */
|
||||
void MX_TIM10_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM10_Init 0 */
|
||||
|
||||
/* USER CODE END TIM10_Init 0 */
|
||||
|
||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM10_Init 1 */
|
||||
|
||||
/* USER CODE END TIM10_Init 1 */
|
||||
htim10.Instance = TIM10;
|
||||
htim10.Init.Prescaler = 0;
|
||||
htim10.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim10.Init.Period = 65535;
|
||||
htim10.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim10.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim10) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_TIM_PWM_Init(&htim10) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 0;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||
if (HAL_TIM_PWM_ConfigChannel(&htim10, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM10_Init 2 */
|
||||
|
||||
/* USER CODE END TIM10_Init 2 */
|
||||
HAL_TIM_MspPostInit(&htim10);
|
||||
|
||||
}
|
||||
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
{
|
||||
|
||||
if(tim_baseHandle->Instance==TIM10)
|
||||
{
|
||||
/* USER CODE BEGIN TIM10_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM10_MspInit 0 */
|
||||
/* TIM10 clock enable */
|
||||
__HAL_RCC_TIM10_CLK_ENABLE();
|
||||
/* USER CODE BEGIN TIM10_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM10_MspInit 1 */
|
||||
}
|
||||
}
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(timHandle->Instance==TIM10)
|
||||
{
|
||||
/* USER CODE BEGIN TIM10_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM10_MspPostInit 0 */
|
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
/**TIM10 GPIO Configuration
|
||||
PB8 ------> TIM10_CH1
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_8;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF3_TIM10;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN TIM10_MspPostInit 1 */
|
||||
|
||||
/* USER CODE END TIM10_MspPostInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
{
|
||||
|
||||
if(tim_baseHandle->Instance==TIM10)
|
||||
{
|
||||
/* USER CODE BEGIN TIM10_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM10_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM10_CLK_DISABLE();
|
||||
/* USER CODE BEGIN TIM10_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM10_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
Reference in New Issue
Block a user