配置 PWM ADC LCD
This commit is contained in:
@@ -18,16 +18,19 @@
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "adc.h"
|
||||
#include "dma.h"
|
||||
#include "spi.h"
|
||||
#include "tim.h"
|
||||
#include "usart.h"
|
||||
#include "gpio.h"
|
||||
#include "lcd_data.h"
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include <stdio.h>
|
||||
#include "button_driver.h"
|
||||
#include "st7735s.h"
|
||||
#include "lcd.h"
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
@@ -86,7 +89,9 @@ int main(void)
|
||||
SystemClock_Config();
|
||||
|
||||
/* USER CODE BEGIN SysInit */
|
||||
|
||||
/* ADC 时钟预分频:PCLK2 / 6 = 72/6 = 12MHz */
|
||||
/* 默认 /2=36MHz 超过 14MHz 规格,ADC 无法正常工作 */
|
||||
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_ADCPRE) | RCC_CFGR_ADCPRE_DIV6;
|
||||
/* USER CODE END SysInit */
|
||||
|
||||
/* Initialize all configured peripherals */
|
||||
@@ -94,18 +99,47 @@ int main(void)
|
||||
MX_DMA_Init();
|
||||
MX_USART1_UART_Init();
|
||||
MX_SPI2_Init();
|
||||
MX_TIM4_Init();
|
||||
MX_ADC1_Init();
|
||||
MX_TIM3_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
printf("\r\nSTM32F103C8T6 Boot OK\r\n");
|
||||
button_driver_init();
|
||||
st7735s_init();
|
||||
st7735s_fill_screen(COLOR_RED);
|
||||
HAL_Delay(500);
|
||||
st7735s_fill_screen(COLOR_GREEN);
|
||||
HAL_Delay(500);
|
||||
st7735s_fill_screen(COLOR_BLUE);
|
||||
HAL_Delay(500);
|
||||
st7735s_fill_screen(COLOR_BLACK);
|
||||
st7735s_draw_string(0, 0, "LCD OK", COLOR_WHITE, COLOR_BLACK);
|
||||
lcd_draw_string(0, 0, "01234", COLOR_WHITE, COLOR_BLACK);
|
||||
lcd_draw_string(0, 16, "LCD_OK", COLOR_WHITE, COLOR_BLACK);
|
||||
|
||||
lcd_draw_chinese_string(0, 32, "\xE9\x98\x9C\xE9\x98\xB3\xE5\xB8\x88\xE8\x8C\x83\xE5\xA4\xA7\xE5\xAD\xA6", COLOR_WHITE, COLOR_BLACK); /*阜阳师范大学*/
|
||||
lcd_draw_chinese_string(0, 48, "\xE7\x94\xB5\xE5\xAD\x90\xE8\xAE\xBE\xE8\xAE\xA1\xE7\xAB\x9E\xE8\xB5\x9B", COLOR_WHITE, COLOR_BLACK); /*电子设计竞赛*/
|
||||
|
||||
/* 启动 TIM4 四路 PWM */
|
||||
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); /* PB6 */
|
||||
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2); /* PB7 */
|
||||
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); /* PB8 */
|
||||
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); /* PB9 */
|
||||
|
||||
/* 设置占空比(0~999 对应 0%~100%) */
|
||||
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, 500); /* 50% */
|
||||
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, 250); /* 25% */
|
||||
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 750); /* 75% */
|
||||
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 999); /* 100% */
|
||||
|
||||
/* === 测试:常规组软件触发,确认 ADC 硬件正常 === */
|
||||
HAL_ADC_Start(&hadc1);
|
||||
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) {
|
||||
printf("ADC REG TEST: %d\r\n", HAL_ADC_GetValue(&hadc1));
|
||||
}
|
||||
HAL_ADC_Stop(&hadc1);
|
||||
|
||||
/* 启动 TIM3 CH4(产生 ADC 触发信号) */
|
||||
HAL_TIM_OC_Start(&htim3, TIM_CHANNEL_4);
|
||||
|
||||
/* 启动 ADC 注入组(TIM3 每触发一次,自动采一轮 PA0~PA3) */
|
||||
HAL_ADCEx_InjectedStart(&hadc1);
|
||||
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
@@ -115,9 +149,15 @@ int main(void)
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
HAL_Delay(500);
|
||||
HAL_Delay(1000);
|
||||
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
|
||||
//printf("Hello word\n");
|
||||
|
||||
/* 读取 ADC 注入组结果(TIM3 以 1kHz 触发,每秒打印一次最新值) */
|
||||
uint16_t adc0 = HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_1);
|
||||
uint16_t adc1 = HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_2);
|
||||
uint16_t adc2 = HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_3);
|
||||
uint16_t adc3 = HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_4);
|
||||
printf("ADC: %4d %4d %4d %4d\r\n", adc0, adc1, adc2, adc3);
|
||||
}
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
@@ -130,6 +170,7 @@ void SystemClock_Config(void)
|
||||
{
|
||||
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||
|
||||
/** Initializes the RCC Oscillators according to the specified parameters
|
||||
* in the RCC_OscInitTypeDef structure.
|
||||
@@ -159,6 +200,12 @@ void SystemClock_Config(void)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
|
||||
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;
|
||||
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 4 */
|
||||
|
||||
Reference in New Issue
Block a user