PWM_Pin and PWM_Pin_STM32

This commit is contained in:
2024-02-11 13:20:18 -03:00
parent 59409c61c5
commit fb4b9e70e4
14 changed files with 4476 additions and 49 deletions

View File

@@ -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
View 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__ */

View File

@@ -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;
}

View File

@@ -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_ */

View 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_ */

View 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;
}

View 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_ */

View File

@@ -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();

View File

@@ -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;

View File

@@ -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
View 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 */