plaintextrefactor(stm32ui): 重新配置SPI1为SPI2并更新GPIO设置,DEMO已经可以使用。
- 更新GPIO设置以反映SPI2的引脚分配。 - 调整spi.c和spi.h文件中的SPI实例和初始化代码。 -确保STM32F407VGT6微控制器的SPI2外设现在正确初始化并使用正确的引脚。
This commit is contained in:
parent
184664ce3d
commit
3f4162df70
|
@ -57,6 +57,14 @@ void Error_Handler(void);
|
||||||
/* USER CODE END EFP */
|
/* USER CODE END EFP */
|
||||||
|
|
||||||
/* Private defines -----------------------------------------------------------*/
|
/* Private defines -----------------------------------------------------------*/
|
||||||
|
#define LED0_Pin GPIO_PIN_2
|
||||||
|
#define LED0_GPIO_Port GPIOB
|
||||||
|
#define SPI2_CS_Pin GPIO_PIN_7
|
||||||
|
#define SPI2_CS_GPIO_Port GPIOE
|
||||||
|
#define SPI2_RS_Pin GPIO_PIN_8
|
||||||
|
#define SPI2_RS_GPIO_Port GPIOE
|
||||||
|
#define SPI2_RST_Pin GPIO_PIN_9
|
||||||
|
#define SPI2_RST_GPIO_Port GPIOE
|
||||||
|
|
||||||
/* USER CODE BEGIN Private defines */
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
|
|
|
@ -32,13 +32,13 @@ extern "C" {
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
extern SPI_HandleTypeDef hspi1;
|
extern SPI_HandleTypeDef hspi2;
|
||||||
|
|
||||||
/* USER CODE BEGIN Private defines */
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
/* USER CODE END Private defines */
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
void MX_SPI1_Init(void);
|
void MX_SPI2_Init(void);
|
||||||
|
|
||||||
/* USER CODE BEGIN Prototypes */
|
/* USER CODE BEGIN Prototypes */
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "u8g2_stm32_spi.h"
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
@ -50,16 +50,16 @@
|
||||||
/* Definitions for defaultTask */
|
/* Definitions for defaultTask */
|
||||||
osThreadId_t defaultTaskHandle;
|
osThreadId_t defaultTaskHandle;
|
||||||
const osThreadAttr_t defaultTask_attributes = {
|
const osThreadAttr_t defaultTask_attributes = {
|
||||||
.name = "defaultTask",
|
.name = "defaultTask",
|
||||||
.stack_size = 128 * 4,
|
.stack_size = 128 * 4,
|
||||||
.priority = (osPriority_t) osPriorityNormal,
|
.priority = (osPriority_t) osPriorityNormal,
|
||||||
};
|
};
|
||||||
/* Definitions for u8g2Task */
|
/* Definitions for u8g2Task */
|
||||||
osThreadId_t u8g2TaskHandle;
|
osThreadId_t u8g2TaskHandle;
|
||||||
const osThreadAttr_t u8g2Task_attributes = {
|
const osThreadAttr_t u8g2Task_attributes = {
|
||||||
.name = "u8g2Task",
|
.name = "u8g2Task",
|
||||||
.stack_size = 128 * 4,
|
.stack_size = 128 * 4,
|
||||||
.priority = (osPriority_t) osPriorityNormal,
|
.priority = (osPriority_t) osPriorityNormal,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
@ -68,6 +68,7 @@ const osThreadAttr_t u8g2Task_attributes = {
|
||||||
/* USER CODE END FunctionPrototypes */
|
/* USER CODE END FunctionPrototypes */
|
||||||
|
|
||||||
void StartDefaultTask(void *argument);
|
void StartDefaultTask(void *argument);
|
||||||
|
|
||||||
void U8g2Task(void *argument);
|
void U8g2Task(void *argument);
|
||||||
|
|
||||||
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
|
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
|
||||||
|
@ -78,40 +79,40 @@ void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void MX_FREERTOS_Init(void) {
|
void MX_FREERTOS_Init(void) {
|
||||||
/* USER CODE BEGIN Init */
|
/* USER CODE BEGIN Init */
|
||||||
|
|
||||||
/* USER CODE END Init */
|
/* USER CODE END Init */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_MUTEX */
|
/* USER CODE BEGIN RTOS_MUTEX */
|
||||||
/* add mutexes, ... */
|
/* add mutexes, ... */
|
||||||
/* USER CODE END RTOS_MUTEX */
|
/* USER CODE END RTOS_MUTEX */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_SEMAPHORES */
|
/* USER CODE BEGIN RTOS_SEMAPHORES */
|
||||||
/* add semaphores, ... */
|
/* add semaphores, ... */
|
||||||
/* USER CODE END RTOS_SEMAPHORES */
|
/* USER CODE END RTOS_SEMAPHORES */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_TIMERS */
|
/* USER CODE BEGIN RTOS_TIMERS */
|
||||||
/* start timers, add new ones, ... */
|
/* start timers, add new ones, ... */
|
||||||
/* USER CODE END RTOS_TIMERS */
|
/* USER CODE END RTOS_TIMERS */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_QUEUES */
|
/* USER CODE BEGIN RTOS_QUEUES */
|
||||||
/* add queues, ... */
|
/* add queues, ... */
|
||||||
/* USER CODE END RTOS_QUEUES */
|
/* USER CODE END RTOS_QUEUES */
|
||||||
|
|
||||||
/* Create the thread(s) */
|
/* Create the thread(s) */
|
||||||
/* creation of defaultTask */
|
/* creation of defaultTask */
|
||||||
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
|
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
|
||||||
|
|
||||||
/* creation of u8g2Task */
|
/* creation of u8g2Task */
|
||||||
u8g2TaskHandle = osThreadNew(U8g2Task, NULL, &u8g2Task_attributes);
|
u8g2TaskHandle = osThreadNew(U8g2Task, NULL, &u8g2Task_attributes);
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_THREADS */
|
/* USER CODE BEGIN RTOS_THREADS */
|
||||||
/* add threads, ... */
|
/* add threads, ... */
|
||||||
/* USER CODE END RTOS_THREADS */
|
/* USER CODE END RTOS_THREADS */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_EVENTS */
|
/* USER CODE BEGIN RTOS_EVENTS */
|
||||||
/* add events, ... */
|
/* add events, ... */
|
||||||
/* USER CODE END RTOS_EVENTS */
|
/* USER CODE END RTOS_EVENTS */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,17 +123,16 @@ void MX_FREERTOS_Init(void) {
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
/* USER CODE END Header_StartDefaultTask */
|
/* USER CODE END Header_StartDefaultTask */
|
||||||
void StartDefaultTask(void *argument)
|
void StartDefaultTask(void *argument) {
|
||||||
{
|
/* USER CODE BEGIN StartDefaultTask */
|
||||||
/* USER CODE BEGIN StartDefaultTask */
|
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
for (;;) {
|
for (;;) {
|
||||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
|
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);
|
||||||
osDelay(1000);
|
osDelay(1000);
|
||||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
|
||||||
osDelay(1000);
|
osDelay(1000);
|
||||||
}
|
}
|
||||||
/* USER CODE END StartDefaultTask */
|
/* USER CODE END StartDefaultTask */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN Header_U8g2Task */
|
/* USER CODE BEGIN Header_U8g2Task */
|
||||||
|
@ -142,14 +142,24 @@ void StartDefaultTask(void *argument)
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
/* USER CODE END Header_U8g2Task */
|
/* USER CODE END Header_U8g2Task */
|
||||||
void U8g2Task(void *argument)
|
void U8g2Task(void *argument) {
|
||||||
{
|
/* USER CODE BEGIN U8g2Task */
|
||||||
/* USER CODE BEGIN U8g2Task */
|
u8g2_Setup_uc1701_mini12864_f(&u8g2, U8G2_R0, u8g2_byte_sw_spi_stm32, u8x8_gpio_and_delay_stm32);
|
||||||
|
u8g2_InitDisplay(&u8g2); //初始化显示
|
||||||
|
u8g2_SetPowerSave(&u8g2, 0); //开启显示
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
|
u8g2_FirstPage(&u8g2);
|
||||||
|
|
||||||
|
// 循环绘制演示页面
|
||||||
|
// 通过调用drawDemo函数绘制页面内容,每次绘制后检查是否需要绘制下一页
|
||||||
|
// 使用u8g2_NextPage函数来确定是否继续绘制下一页,直到没有更多页面需要绘制
|
||||||
|
do {
|
||||||
|
drawDemo();
|
||||||
|
} while (u8g2_NextPage(&u8g2));
|
||||||
for (;;) {
|
for (;;) {
|
||||||
osDelay(1);
|
osDelay(1);
|
||||||
}
|
}
|
||||||
/* USER CODE END U8g2Task */
|
/* USER CODE END U8g2Task */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Private application code --------------------------------------------------*/
|
/* Private application code --------------------------------------------------*/
|
||||||
|
|
|
@ -46,20 +46,37 @@ void MX_GPIO_Init(void)
|
||||||
|
|
||||||
/* GPIO Ports Clock Enable */
|
/* GPIO Ports Clock Enable */
|
||||||
__HAL_RCC_GPIOH_CLK_ENABLE();
|
__HAL_RCC_GPIOH_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin : PB2 */
|
/*Configure GPIO pin Output Level */
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_2;
|
HAL_GPIO_WritePin(GPIOE, SPI2_CS_Pin|SPI2_RS_Pin|SPI2_RST_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = LED0_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
HAL_GPIO_Init(LED0_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PtPin */
|
||||||
|
GPIO_InitStruct.Pin = SPI2_CS_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
|
HAL_GPIO_Init(SPI2_CS_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/*Configure GPIO pins : PEPin PEPin */
|
||||||
|
GPIO_InitStruct.Pin = SPI2_RS_Pin|SPI2_RST_Pin;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,8 +92,8 @@ int main(void)
|
||||||
/* Initialize all configured peripherals */
|
/* Initialize all configured peripherals */
|
||||||
MX_GPIO_Init();
|
MX_GPIO_Init();
|
||||||
MX_SDIO_SD_Init();
|
MX_SDIO_SD_Init();
|
||||||
MX_SPI1_Init();
|
|
||||||
MX_FATFS_Init();
|
MX_FATFS_Init();
|
||||||
|
MX_SPI2_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|
104
Core/Src/spi.c
104
Core/Src/spi.c
|
@ -24,38 +24,38 @@
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
SPI_HandleTypeDef hspi1;
|
SPI_HandleTypeDef hspi2;
|
||||||
|
|
||||||
/* SPI1 init function */
|
/* SPI2 init function */
|
||||||
void MX_SPI1_Init(void)
|
void MX_SPI2_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_Init 0 */
|
/* USER CODE BEGIN SPI2_Init 0 */
|
||||||
|
|
||||||
/* USER CODE END SPI1_Init 0 */
|
/* USER CODE END SPI2_Init 0 */
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_Init 1 */
|
/* USER CODE BEGIN SPI2_Init 1 */
|
||||||
|
|
||||||
/* USER CODE END SPI1_Init 1 */
|
/* USER CODE END SPI2_Init 1 */
|
||||||
hspi1.Instance = SPI1;
|
hspi2.Instance = SPI2;
|
||||||
hspi1.Init.Mode = SPI_MODE_MASTER;
|
hspi2.Init.Mode = SPI_MODE_MASTER;
|
||||||
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
hspi2.Init.Direction = SPI_DIRECTION_1LINE;
|
||||||
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
|
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||||
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||||
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||||
hspi1.Init.NSS = SPI_NSS_SOFT;
|
hspi2.Init.NSS = SPI_NSS_SOFT;
|
||||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
|
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
|
||||||
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||||
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||||
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||||
hspi1.Init.CRCPolynomial = 10;
|
hspi2.Init.CRCPolynomial = 10;
|
||||||
if (HAL_SPI_Init(&hspi1) != HAL_OK)
|
if (HAL_SPI_Init(&hspi2) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN SPI1_Init 2 */
|
/* USER CODE BEGIN SPI2_Init 2 */
|
||||||
|
|
||||||
/* USER CODE END SPI1_Init 2 */
|
/* USER CODE END SPI2_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,54 +63,62 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
if(spiHandle->Instance==SPI1)
|
if(spiHandle->Instance==SPI2)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN SPI1_MspInit 0 */
|
/* USER CODE BEGIN SPI2_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspInit 0 */
|
/* USER CODE END SPI2_MspInit 0 */
|
||||||
/* SPI1 clock enable */
|
/* SPI2 clock enable */
|
||||||
__HAL_RCC_SPI1_CLK_ENABLE();
|
__HAL_RCC_SPI2_CLK_ENABLE();
|
||||||
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
/**SPI1 GPIO Configuration
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
PA5 ------> SPI1_SCK
|
/**SPI2 GPIO Configuration
|
||||||
PA6 ------> SPI1_MISO
|
PC3 ------> SPI2_MOSI
|
||||||
PA7 ------> SPI1_MOSI
|
PB10 ------> SPI2_SCK
|
||||||
*/
|
*/
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
|
GPIO_InitStruct.Pin = GPIO_PIN_3;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_MspInit 1 */
|
GPIO_InitStruct.Pin = GPIO_PIN_10;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspInit 1 */
|
/* USER CODE BEGIN SPI2_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI2_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
|
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(spiHandle->Instance==SPI1)
|
if(spiHandle->Instance==SPI2)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN SPI1_MspDeInit 0 */
|
/* USER CODE BEGIN SPI2_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspDeInit 0 */
|
/* USER CODE END SPI2_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_SPI1_CLK_DISABLE();
|
__HAL_RCC_SPI2_CLK_DISABLE();
|
||||||
|
|
||||||
/**SPI1 GPIO Configuration
|
/**SPI2 GPIO Configuration
|
||||||
PA5 ------> SPI1_SCK
|
PC3 ------> SPI2_MOSI
|
||||||
PA6 ------> SPI1_MISO
|
PB10 ------> SPI2_SCK
|
||||||
PA7 ------> SPI1_MOSI
|
|
||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
|
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_3);
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_MspDeInit 1 */
|
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10);
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspDeInit 1 */
|
/* USER CODE BEGIN SPI2_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END SPI2_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2243
U8g2/mui_u8g2.c
2243
U8g2/mui_u8g2.c
File diff suppressed because it is too large
Load Diff
308
U8g2/mui_u8g2.h
308
U8g2/mui_u8g2.h
|
@ -1,308 +0,0 @@
|
||||||
/*
|
|
||||||
|
|
||||||
mui_u8g2.h
|
|
||||||
|
|
||||||
Monochrome minimal user interface: Glue code between mui and u8g2.
|
|
||||||
|
|
||||||
Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
|
|
||||||
|
|
||||||
Copyright (c) 2021, olikraus@gmail.com
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this list
|
|
||||||
of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer in the documentation and/or other
|
|
||||||
materials provided with the distribution.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
||||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
||||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
||||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
Reference Manual:
|
|
||||||
https://github.com/olikraus/u8g2/wiki/muiref
|
|
||||||
|
|
||||||
MUIF_U8G2_LABEL()
|
|
||||||
replacement for MUIF_LABEL(mui_u8g2_draw_text),
|
|
||||||
used by MUI_LABEL(x,y,"text")
|
|
||||||
Supports UTF8
|
|
||||||
|
|
||||||
MUIF_U8G2_FONT_STYLE(n, font)
|
|
||||||
A special u8g2 style function, which replaces MUIF_STYLE, but restricts the style change to the
|
|
||||||
specific font argument (however, this should be good enough in most cases).
|
|
||||||
As usual, the style "n" can be activated with MUI_STYLE(n) in FDS.
|
|
||||||
Example:
|
|
||||||
muif_t muif_list[] MUI_PROGMEM = {
|
|
||||||
MUIF_U8G2_LABEL(),
|
|
||||||
MUIF_U8G2_FONT_STYLE(0, u8g2_font_5x8_tr)
|
|
||||||
};
|
|
||||||
fds_t fds[] MUI_PROGMEM =
|
|
||||||
MUI_FORM(1)
|
|
||||||
MUI_STYLE(0)
|
|
||||||
MUI_LABEL(5,12, "5x8 Font")
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MUI_U8G2_H
|
|
||||||
#define MUI_U8G2_H
|
|
||||||
|
|
||||||
#include "u8g2.h"
|
|
||||||
#include "mui.h"
|
|
||||||
|
|
||||||
/*==========================================*/
|
|
||||||
/* C++ compatible */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define MUI_U8G2_COMMA ,
|
|
||||||
|
|
||||||
typedef const char * (*mui_u8g2_get_list_element_cb)(void *data, uint16_t index);
|
|
||||||
typedef uint16_t (*mui_u8g2_get_list_count_cb)(void *data);
|
|
||||||
|
|
||||||
struct mui_u8g2_list_struct
|
|
||||||
{
|
|
||||||
uint16_t *selection;
|
|
||||||
void *data;
|
|
||||||
mui_u8g2_get_list_element_cb get_list_element;
|
|
||||||
mui_u8g2_get_list_count_cb get_list_count;
|
|
||||||
} MUI_PROGMEM;
|
|
||||||
|
|
||||||
typedef const struct mui_u8g2_list_struct mui_u8g2_list_t;
|
|
||||||
|
|
||||||
#if defined(__GNUC__) && defined(__AVR__)
|
|
||||||
# define mui_u8g2_list_get_selection_ptr(list) ((uint16_t *)mui_pgm_wread(&((list)->selection)))
|
|
||||||
# define mui_u8g2_list_get_data_ptr(list) ((void *)mui_pgm_wread(&((list)->data)))
|
|
||||||
# define mui_u8g2_list_get_element_cb(list) ((mui_u8g2_get_list_element_cb)mui_pgm_wread(&((list)->get_list_element)))
|
|
||||||
# define mui_u8g2_list_get_count_cb(list) ((mui_u8g2_get_list_count_cb)mui_pgm_wread(&((list)->get_list_count)))
|
|
||||||
#else
|
|
||||||
# define mui_u8g2_list_get_selection_ptr(list) ((list)->selection)
|
|
||||||
# define mui_u8g2_list_get_data_ptr(list) ((list)->data)
|
|
||||||
# define mui_u8g2_list_get_element_cb(list) ((list)->get_list_element)
|
|
||||||
# define mui_u8g2_list_get_count_cb(list) ((list)->get_list_count)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
struct mui_u8g2_u8_min_max_struct
|
|
||||||
{
|
|
||||||
uint8_t *value;
|
|
||||||
uint8_t min;
|
|
||||||
uint8_t max;
|
|
||||||
} MUI_PROGMEM;
|
|
||||||
|
|
||||||
typedef const struct mui_u8g2_u8_min_max_struct mui_u8g2_u8_min_max_t;
|
|
||||||
|
|
||||||
#if defined(__GNUC__) && defined(__AVR__)
|
|
||||||
# define mui_u8g2_u8mm_get_min(u8mm) mui_pgm_read(&((u8mm)->min))
|
|
||||||
# define mui_u8g2_u8mm_get_max(u8mm) mui_pgm_read(&((u8mm)->max))
|
|
||||||
# define mui_u8g2_u8mm_get_valptr(u8mm) ((uint8_t *)mui_pgm_wread(&((u8mm)->value)))
|
|
||||||
#else
|
|
||||||
# define mui_u8g2_u8mm_get_min(u8mm) ((u8mm)->min)
|
|
||||||
# define mui_u8g2_u8mm_get_max(u8mm) ((u8mm)->max)
|
|
||||||
# define mui_u8g2_u8mm_get_valptr(u8mm) ((u8mm)->value)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
struct mui_u8g2_u8_min_max_step_struct
|
|
||||||
{
|
|
||||||
uint8_t *value;
|
|
||||||
uint8_t min;
|
|
||||||
uint8_t max;
|
|
||||||
uint8_t step;
|
|
||||||
uint8_t flags;
|
|
||||||
uint8_t width; // added with issue 2200, might not be used by all bar graph functions
|
|
||||||
} MUI_PROGMEM;
|
|
||||||
|
|
||||||
typedef const struct mui_u8g2_u8_min_max_step_struct mui_u8g2_u8_min_max_step_t;
|
|
||||||
|
|
||||||
/* list of bit values for the "flags" variable */
|
|
||||||
#define MUI_MMS_2X_BAR 0x01
|
|
||||||
#define MUI_MMS_4X_BAR 0x02
|
|
||||||
#define MUI_MMS_SHOW_VALUE 0x04
|
|
||||||
#define MUI_MMS_NO_WRAP 0x08
|
|
||||||
|
|
||||||
#if defined(__GNUC__) && defined(__AVR__)
|
|
||||||
# define mui_u8g2_u8mms_get_width(u8mm) mui_pgm_read(&((u8mm)->width))
|
|
||||||
# define mui_u8g2_u8mms_get_step(u8mm) mui_pgm_read(&((u8mm)->step))
|
|
||||||
# define mui_u8g2_u8mms_get_flags(u8mm) mui_pgm_read(&((u8mm)->flags))
|
|
||||||
# define mui_u8g2_u8mms_get_min(u8mm) mui_pgm_read(&((u8mm)->min))
|
|
||||||
# define mui_u8g2_u8mms_get_max(u8mm) mui_pgm_read(&((u8mm)->max))
|
|
||||||
# define mui_u8g2_u8mms_get_valptr(u8mm) ((uint8_t *)mui_pgm_wread(&((u8mm)->value)))
|
|
||||||
#else
|
|
||||||
# define mui_u8g2_u8mms_get_width(u8mm) ((u8mm)->width)
|
|
||||||
# define mui_u8g2_u8mms_get_step(u8mm) ((u8mm)->step)
|
|
||||||
# define mui_u8g2_u8mms_get_flags(u8mm) ((u8mm)->flags)
|
|
||||||
# define mui_u8g2_u8mms_get_min(u8mm) ((u8mm)->min)
|
|
||||||
# define mui_u8g2_u8mms_get_max(u8mm) ((u8mm)->max)
|
|
||||||
# define mui_u8g2_u8mms_get_valptr(u8mm) ((u8mm)->value)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* helper functions */
|
|
||||||
|
|
||||||
u8g2_uint_t mui_get_x(mui_t *ui);
|
|
||||||
u8g2_uint_t mui_get_y(mui_t *ui);
|
|
||||||
u8g2_t *mui_get_U8g2(mui_t *ui);
|
|
||||||
|
|
||||||
void mui_u8g2_draw_button_utf(mui_t *ui, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text);
|
|
||||||
u8g2_uint_t mui_u8g2_get_pi_flags(mui_t *ui);
|
|
||||||
void mui_u8g2_draw_button_pi(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text);
|
|
||||||
u8g2_uint_t mui_u8g2_get_fi_flags(mui_t *ui);
|
|
||||||
void mui_u8g2_draw_button_fi(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text);
|
|
||||||
u8g2_uint_t mui_u8g2_get_pf_flags(mui_t *ui);
|
|
||||||
void mui_u8g2_draw_button_pf(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text);
|
|
||||||
u8g2_uint_t mui_u8g2_get_if_flags(mui_t *ui);
|
|
||||||
void mui_u8g2_draw_button_if(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ready to use field functions */
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_draw_text(mui_t *ui, uint8_t msg);
|
|
||||||
uint8_t mui_u8g2_btn_goto_wm_fi(mui_t *ui, uint8_t msg); /* GIF */
|
|
||||||
uint8_t mui_u8g2_btn_goto_wm_if(mui_t *ui, uint8_t msg);
|
|
||||||
uint8_t mui_u8g2_btn_goto_w2_fi(mui_t *ui, uint8_t msg); /* GIF */
|
|
||||||
uint8_t mui_u8g2_btn_goto_w2_if(mui_t *ui, uint8_t msg);
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_btn_goto_w1_pi(mui_t *ui, uint8_t msg); /* GIF */
|
|
||||||
uint8_t mui_u8g2_btn_goto_w1_fi(mui_t *ui, uint8_t msg); /* GIF */
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_btn_exit_wm_fi(mui_t *ui, uint8_t msg); /* similar to 'mui_u8g2_btn_goto_wm_fi' but will exit the menu system */
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_u8_chkbox_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE, MUI_XY */
|
|
||||||
uint8_t mui_u8g2_u8_radio_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_u8_opt_line_wa_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */
|
|
||||||
uint8_t mui_u8g2_u8_opt_line_wa_mse_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */
|
|
||||||
uint8_t mui_u8g2_u8_opt_line_wa_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */
|
|
||||||
uint8_t mui_u8g2_u8_opt_line_wa_mud_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XYAT */
|
|
||||||
|
|
||||||
/* dropdown list / combo box */
|
|
||||||
/* The text part of the parent defines a '|' separated list of elements, which can be selected by the child. */
|
|
||||||
/* Argument is a form number where the child element is placed multiple times */
|
|
||||||
/* The child form does not require the ok button, because the child function will return to the parent with the select element */
|
|
||||||
uint8_t mui_u8g2_u8_opt_parent_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE, MUI_XYAT */
|
|
||||||
uint8_t mui_u8g2_u8_opt_radio_child_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE, MUI_XYA */
|
|
||||||
uint8_t mui_u8g2_u8_opt_radio_child_w1_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE, MUI_XYA */
|
|
||||||
uint8_t mui_u8g2_u8_opt_child_wm_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE, MUI_XYA */
|
|
||||||
/* Note: there is no opt_child_goto muif, because this can be done with mui_u8g2_goto_form_w1_pi */
|
|
||||||
|
|
||||||
/* (scrollable) jump menu */
|
|
||||||
/* The text part of the parent defines a '|' separated list of elements, which can be selected goto_form functions. */
|
|
||||||
/* Each '|' separated element must be prefixed with the form number (MUI_x) */
|
|
||||||
uint8_t mui_u8g2_goto_data(mui_t *ui, uint8_t msg); /* REF, MUIF_RO, MUI_DATA (WARNING: Must appear only once per form!!! */
|
|
||||||
uint8_t mui_u8g2_goto_form_w1_pi(mui_t *ui, uint8_t msg); /* REF, MUIF_BUTTON, MUI_XYA */
|
|
||||||
uint8_t mui_u8g2_goto_form_w1_pf(mui_t *ui, uint8_t msg); /* REF, MUIF_BUTTON, MUI_XYA */
|
|
||||||
|
|
||||||
|
|
||||||
/* character input */
|
|
||||||
uint8_t mui_u8g2_u8_char_wm_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_VARIABLE,MUI_XY, usually requires a monospaced font line profont12 */
|
|
||||||
|
|
||||||
|
|
||||||
/*===== MUIF U8g2 Label =====*/
|
|
||||||
|
|
||||||
#define MUIF_U8G2_LABEL() MUIF_LABEL(mui_u8g2_draw_text)
|
|
||||||
|
|
||||||
|
|
||||||
/*===== data = u8g2 font data =====*/
|
|
||||||
|
|
||||||
//#define MUIF_U8G2_FONT_STYLE(n,font) MUIF("S" #n, 0, (void *)(font), mui_u8g2_set_font_style_function)
|
|
||||||
#define MUIF_U8G2_FONT_STYLE(n, font) { 'S', #n[0], 0, 0, (void *)(font), mui_u8g2_set_font_style_function}
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_set_font_style_function(mui_t *ui, uint8_t msg);
|
|
||||||
|
|
||||||
|
|
||||||
/*===== data = mui_u8g2_u8_min_max_t* =====*/
|
|
||||||
|
|
||||||
/* gcc note: the macro uses array compound literals to extend the lifetime in C++, see last section in https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html */
|
|
||||||
#define MUIF_U8G2_U8_MIN_MAX(id, valptr, min, max, muif) \
|
|
||||||
MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \
|
|
||||||
(void *)((mui_u8g2_u8_min_max_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max)}}), \
|
|
||||||
(muif))
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_u8_min_max_wm_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */
|
|
||||||
uint8_t mui_u8g2_u8_min_max_wm_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_u8_min_max_wm_mse_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */
|
|
||||||
uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U8_MIN_MAX, MUI_XY */
|
|
||||||
|
|
||||||
/*===== data = mui_u8g2_u8_min_max_step_t* =====*/
|
|
||||||
|
|
||||||
/* gcc note: the macro uses array compound literals to extend the lifetime in C++, see last section in https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html */
|
|
||||||
#define MUIF_U8G2_U8_MIN_MAX_STEP(id, valptr, min, max, step, flags, muif) \
|
|
||||||
MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \
|
|
||||||
(void *)((mui_u8g2_u8_min_max_step_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max) MUI_U8G2_COMMA (step) MUI_U8G2_COMMA (flags) MUI_U8G2_COMMA (0) }}), \
|
|
||||||
(muif))
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_u8_bar_wm_mse_pi(mui_t *ui, uint8_t msg);
|
|
||||||
uint8_t mui_u8g2_u8_bar_wm_mud_pi(mui_t *ui, uint8_t msg);
|
|
||||||
uint8_t mui_u8g2_u8_bar_wm_mse_pf(mui_t *ui, uint8_t msg);
|
|
||||||
uint8_t mui_u8g2_u8_bar_wm_mud_pf(mui_t *ui, uint8_t msg);
|
|
||||||
|
|
||||||
|
|
||||||
#define MUIF_U8G2_U8_MIN_MAX_STEP_WIDTH(id, valptr, min, max, step, width, flags, muif) \
|
|
||||||
MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \
|
|
||||||
(void *)((mui_u8g2_u8_min_max_step_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max) MUI_U8G2_COMMA (step) MUI_U8G2_COMMA (flags) MUI_U8G2_COMMA (width) }}), \
|
|
||||||
(muif))
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pi(mui_t *ui, uint8_t msg);
|
|
||||||
uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pi(mui_t *ui, uint8_t msg);
|
|
||||||
uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pf(mui_t *ui, uint8_t msg);
|
|
||||||
uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pf(mui_t *ui, uint8_t msg);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*===== data = mui_u8g2_list_t* =====*/
|
|
||||||
/* similar to mui_u8g2_u8_opt_line, but u16 and dynamic list */
|
|
||||||
|
|
||||||
|
|
||||||
#define MUIF_U8G2_U16_LIST(id, valptr, dataptr, getcb, cntcb, muif) \
|
|
||||||
MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \
|
|
||||||
(void *)((mui_u8g2_list_t [] ) {{ (valptr) MUI_U8G2_COMMA (dataptr) MUI_U8G2_COMMA (getcb) MUI_U8G2_COMMA (cntcb)}}), \
|
|
||||||
(muif))
|
|
||||||
|
|
||||||
uint8_t mui_u8g2_u16_list_line_wa_mse_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */
|
|
||||||
uint8_t mui_u8g2_u16_list_line_wa_mud_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */
|
|
||||||
|
|
||||||
|
|
||||||
/* dropdown list / combo box with 16 size and callback functions for MUIF_U8G2_U16_LIST */
|
|
||||||
uint8_t mui_u8g2_u16_list_parent_wm_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=subform */
|
|
||||||
uint8_t mui_u8g2_u16_list_child_w1_pi(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G2_U16_LIST, MUI_XYA, arg=sub element number */
|
|
||||||
uint8_t mui_u8g2_u16_list_goto_w1_pi(mui_t *ui, uint8_t msg); /* REF, MUIF_U8G2_U16_LIST first char of the string denotes the target form */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* MUI_U8G2_H */
|
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
//
|
||||||
|
// Created by wuqiyang on 24-8-18.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "u8g2_stm32_spi.h"
|
||||||
|
|
||||||
|
u8g2_t u8g2;
|
||||||
|
|
||||||
|
#include "u8g2.h"
|
||||||
|
|
||||||
|
uint8_t u8g2_byte_sw_spi_stm32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) {
|
||||||
|
switch (msg) {
|
||||||
|
case U8X8_MSG_BYTE_SEND: /*通过SPI发送arg_int个字节数据*/
|
||||||
|
// HAL_SPI_Transmit_DMA(&hspi1, (uint8_t *)arg_ptr, arg_int);while(hspi1.TxXferCount);
|
||||||
|
/*配置了DMA取消上一行注释即可*/
|
||||||
|
HAL_SPI_Transmit(&hspi2, (uint8_t *) arg_ptr, arg_int, 200);
|
||||||
|
/*这是CubeMX生成的初始化*/
|
||||||
|
break;
|
||||||
|
case U8X8_MSG_BYTE_INIT: /*初始化函数*/
|
||||||
|
break;
|
||||||
|
case U8X8_MSG_BYTE_SET_DC: /*设AS引脚,表明发送的是数据还是命令*/
|
||||||
|
HAL_GPIO_WritePin(SPI2_RS_GPIO_Port, SPI2_RS_Pin, (GPIO_PinState) arg_int);
|
||||||
|
break;
|
||||||
|
case U8X8_MSG_BYTE_START_TRANSFER:
|
||||||
|
u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level);
|
||||||
|
u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL);
|
||||||
|
break;
|
||||||
|
case U8X8_MSG_BYTE_END_TRANSFER:
|
||||||
|
u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL);
|
||||||
|
u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8x8_gpio_and_delay_stm32(U8X8_UNUSED u8x8_t *u8x8,
|
||||||
|
U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int,
|
||||||
|
U8X8_UNUSED void *arg_ptr) {
|
||||||
|
switch (msg) {
|
||||||
|
case U8X8_MSG_GPIO_AND_DELAY_INIT: /*delay和GPIO的初始化,在main中已经初始化完成了*/
|
||||||
|
break;
|
||||||
|
case U8X8_MSG_DELAY_MILLI: /*延时函数*/
|
||||||
|
HAL_Delay(arg_int); //调用谁stm32系统延时函数
|
||||||
|
break;
|
||||||
|
case U8X8_MSG_GPIO_CS: /*片选信号*/ //由于只有一个SPI设备,所以片选信号在初始化时已经设置为常有效
|
||||||
|
HAL_GPIO_WritePin(SPI2_CS_GPIO_Port, SPI2_CS_Pin, (GPIO_PinState) arg_int);
|
||||||
|
break;
|
||||||
|
case U8X8_MSG_GPIO_DC: /*设置RS引脚,表明发送的是数据还是命令*/
|
||||||
|
HAL_GPIO_WritePin(SPI2_RS_GPIO_Port, SPI2_RS_Pin, (GPIO_PinState) arg_int);
|
||||||
|
break;
|
||||||
|
case U8X8_MSG_GPIO_RESET:
|
||||||
|
HAL_GPIO_WritePin(SPI2_RST_GPIO_Port, SPI2_RST_Pin, (GPIO_PinState) arg_int);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*官方logo的Demo*/
|
||||||
|
void drawDemo() {
|
||||||
|
u8g2_SetFontMode(&u8g2, 1); /*字体模式选择*/
|
||||||
|
u8g2_SetFontDirection(&u8g2, 0); /*字体方向选择*/
|
||||||
|
u8g2_SetFont(&u8g2, u8g2_font_inb24_mf); /*字库选择*/
|
||||||
|
u8g2_DrawStr(&u8g2, 0, 20, "U");
|
||||||
|
|
||||||
|
u8g2_SetFontDirection(&u8g2, 1);
|
||||||
|
u8g2_SetFont(&u8g2, u8g2_font_inb30_mn);
|
||||||
|
u8g2_DrawStr(&u8g2, 21, 8, "8");
|
||||||
|
|
||||||
|
u8g2_SetFontDirection(&u8g2, 0);
|
||||||
|
u8g2_SetFont(&u8g2, u8g2_font_inb24_mf);
|
||||||
|
u8g2_DrawStr(&u8g2, 51, 30, "g");
|
||||||
|
u8g2_DrawStr(&u8g2, 67, 30, "\xb2");
|
||||||
|
|
||||||
|
u8g2_DrawHLine(&u8g2, 2, 35, 47);
|
||||||
|
u8g2_DrawHLine(&u8g2, 3, 36, 47);
|
||||||
|
u8g2_DrawVLine(&u8g2, 45, 32, 12);
|
||||||
|
u8g2_DrawVLine(&u8g2, 46, 33, 12);
|
||||||
|
|
||||||
|
u8g2_SetFont(&u8g2, u8g2_font_4x6_tr);
|
||||||
|
u8g2_DrawStr(&u8g2, 1, 54, "github.com/olikraus/u8g2");
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
//
|
||||||
|
// Created by wuqiyang on 24-8-18.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef STM32UI_U8G2_STM32_SPI_H
|
||||||
|
#define STM32UI_U8G2_STM32_SPI_H
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
#include "u8g2.h"
|
||||||
|
#include "spi.h"
|
||||||
|
|
||||||
|
extern u8g2_t u8g2;
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g2_byte_sw_spi_stm32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
|
||||||
|
|
||||||
|
uint8_t u8x8_gpio_and_delay_stm32(U8X8_UNUSED u8x8_t *u8x8,
|
||||||
|
U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int,
|
||||||
|
U8X8_UNUSED void *arg_ptr);
|
||||||
|
|
||||||
|
void drawDemo();
|
||||||
|
|
||||||
|
#endif //STM32UI_U8G2_STM32_SPI_H
|
76
stm32ui.ioc
76
stm32ui.ioc
|
@ -7,7 +7,7 @@ FREERTOS.IPParameters=Tasks01,configUSE_NEWLIB_REENTRANT,FootprintOK
|
||||||
FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;u8g2Task,24,128,U8g2Task,Default,NULL,Dynamic,NULL,NULL
|
FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;u8g2Task,24,128,U8g2Task,Default,NULL,Dynamic,NULL,NULL
|
||||||
FREERTOS.configUSE_NEWLIB_REENTRANT=1
|
FREERTOS.configUSE_NEWLIB_REENTRANT=1
|
||||||
File.Version=6
|
File.Version=6
|
||||||
GPIO.groupedBy=
|
GPIO.groupedBy=Group By Peripherals
|
||||||
KeepUserPlacement=false
|
KeepUserPlacement=false
|
||||||
Mcu.CPN=STM32F407VGT6
|
Mcu.CPN=STM32F407VGT6
|
||||||
Mcu.Family=STM32F4
|
Mcu.Family=STM32F4
|
||||||
|
@ -16,27 +16,29 @@ Mcu.IP1=FREERTOS
|
||||||
Mcu.IP2=NVIC
|
Mcu.IP2=NVIC
|
||||||
Mcu.IP3=RCC
|
Mcu.IP3=RCC
|
||||||
Mcu.IP4=SDIO
|
Mcu.IP4=SDIO
|
||||||
Mcu.IP5=SPI1
|
Mcu.IP5=SPI2
|
||||||
Mcu.IP6=SYS
|
Mcu.IP6=SYS
|
||||||
Mcu.IPNb=7
|
Mcu.IPNb=7
|
||||||
Mcu.Name=STM32F407V(E-G)Tx
|
Mcu.Name=STM32F407V(E-G)Tx
|
||||||
Mcu.Package=LQFP100
|
Mcu.Package=LQFP100
|
||||||
Mcu.Pin0=PH0-OSC_IN
|
Mcu.Pin0=PH0-OSC_IN
|
||||||
Mcu.Pin1=PH1-OSC_OUT
|
Mcu.Pin1=PH1-OSC_OUT
|
||||||
Mcu.Pin10=PC12
|
Mcu.Pin10=PC10
|
||||||
Mcu.Pin11=PD2
|
Mcu.Pin11=PC11
|
||||||
Mcu.Pin12=VP_FATFS_VS_SDIO
|
Mcu.Pin12=PC12
|
||||||
Mcu.Pin13=VP_FREERTOS_VS_CMSIS_V2
|
Mcu.Pin13=PD2
|
||||||
Mcu.Pin14=VP_SYS_VS_tim1
|
Mcu.Pin14=VP_FATFS_VS_SDIO
|
||||||
Mcu.Pin2=PA5
|
Mcu.Pin15=VP_FREERTOS_VS_CMSIS_V2
|
||||||
Mcu.Pin3=PA6
|
Mcu.Pin16=VP_SYS_VS_tim1
|
||||||
Mcu.Pin4=PA7
|
Mcu.Pin2=PC3
|
||||||
Mcu.Pin5=PB2
|
Mcu.Pin3=PB2
|
||||||
Mcu.Pin6=PC8
|
Mcu.Pin4=PE7
|
||||||
Mcu.Pin7=PC9
|
Mcu.Pin5=PE8
|
||||||
Mcu.Pin8=PC10
|
Mcu.Pin6=PE9
|
||||||
Mcu.Pin9=PC11
|
Mcu.Pin7=PB10
|
||||||
Mcu.PinsNb=15
|
Mcu.Pin8=PC8
|
||||||
|
Mcu.Pin9=PC9
|
||||||
|
Mcu.PinsNb=17
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32F407VGTx
|
Mcu.UserName=STM32F407VGTx
|
||||||
|
@ -59,12 +61,10 @@ NVIC.TIM1_UP_TIM10_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:tru
|
||||||
NVIC.TimeBase=TIM1_UP_TIM10_IRQn
|
NVIC.TimeBase=TIM1_UP_TIM10_IRQn
|
||||||
NVIC.TimeBaseIP=TIM1
|
NVIC.TimeBaseIP=TIM1
|
||||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
||||||
PA5.Mode=Full_Duplex_Master
|
PB10.Mode=Simplex_Bidirectional_Master
|
||||||
PA5.Signal=SPI1_SCK
|
PB10.Signal=SPI2_SCK
|
||||||
PA6.Mode=Full_Duplex_Master
|
PB2.GPIOParameters=GPIO_Label
|
||||||
PA6.Signal=SPI1_MISO
|
PB2.GPIO_Label=LED0
|
||||||
PA7.Mode=Full_Duplex_Master
|
|
||||||
PA7.Signal=SPI1_MOSI
|
|
||||||
PB2.Locked=true
|
PB2.Locked=true
|
||||||
PB2.Signal=GPIO_Output
|
PB2.Signal=GPIO_Output
|
||||||
PC10.Mode=SD_4_bits_Wide_bus
|
PC10.Mode=SD_4_bits_Wide_bus
|
||||||
|
@ -73,12 +73,27 @@ PC11.Mode=SD_4_bits_Wide_bus
|
||||||
PC11.Signal=SDIO_D3
|
PC11.Signal=SDIO_D3
|
||||||
PC12.Mode=SD_4_bits_Wide_bus
|
PC12.Mode=SD_4_bits_Wide_bus
|
||||||
PC12.Signal=SDIO_CK
|
PC12.Signal=SDIO_CK
|
||||||
|
PC3.Mode=Simplex_Bidirectional_Master
|
||||||
|
PC3.Signal=SPI2_MOSI
|
||||||
PC8.Mode=SD_4_bits_Wide_bus
|
PC8.Mode=SD_4_bits_Wide_bus
|
||||||
PC8.Signal=SDIO_D0
|
PC8.Signal=SDIO_D0
|
||||||
PC9.Mode=SD_4_bits_Wide_bus
|
PC9.Mode=SD_4_bits_Wide_bus
|
||||||
PC9.Signal=SDIO_D1
|
PC9.Signal=SDIO_D1
|
||||||
PD2.Mode=SD_4_bits_Wide_bus
|
PD2.Mode=SD_4_bits_Wide_bus
|
||||||
PD2.Signal=SDIO_CMD
|
PD2.Signal=SDIO_CMD
|
||||||
|
PE7.GPIOParameters=GPIO_Speed,GPIO_Label
|
||||||
|
PE7.GPIO_Label=SPI2_CS
|
||||||
|
PE7.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
|
||||||
|
PE7.Locked=true
|
||||||
|
PE7.Signal=GPIO_Output
|
||||||
|
PE8.GPIOParameters=GPIO_Label
|
||||||
|
PE8.GPIO_Label=SPI2_RS
|
||||||
|
PE8.Locked=true
|
||||||
|
PE8.Signal=GPIO_Output
|
||||||
|
PE9.GPIOParameters=GPIO_Label
|
||||||
|
PE9.GPIO_Label=SPI2_RST
|
||||||
|
PE9.Locked=true
|
||||||
|
PE9.Signal=GPIO_Output
|
||||||
PH0-OSC_IN.Mode=HSE-External-Oscillator
|
PH0-OSC_IN.Mode=HSE-External-Oscillator
|
||||||
PH0-OSC_IN.Signal=RCC_OSC_IN
|
PH0-OSC_IN.Signal=RCC_OSC_IN
|
||||||
PH1-OSC_OUT.Mode=HSE-External-Oscillator
|
PH1-OSC_OUT.Mode=HSE-External-Oscillator
|
||||||
|
@ -114,7 +129,7 @@ ProjectManager.ToolChainLocation=
|
||||||
ProjectManager.UAScriptAfterPath=
|
ProjectManager.UAScriptAfterPath=
|
||||||
ProjectManager.UAScriptBeforePath=
|
ProjectManager.UAScriptBeforePath=
|
||||||
ProjectManager.UnderRoot=true
|
ProjectManager.UnderRoot=true
|
||||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_SDIO_SD_Init-SDIO-false-HAL-true,4-MX_SPI1_Init-SPI1-false-HAL-true,5-MX_FATFS_Init-FATFS-false-HAL-false
|
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_SDIO_SD_Init-SDIO-false-HAL-true,4-MX_FATFS_Init-FATFS-false-HAL-false,5-MX_SPI2_Init-SPI2-false-HAL-true
|
||||||
RCC.48MHZClocksFreq_Value=42000000
|
RCC.48MHZClocksFreq_Value=42000000
|
||||||
RCC.AHBFreq_Value=168000000
|
RCC.AHBFreq_Value=168000000
|
||||||
RCC.APB1CLKDivider=RCC_HCLK_DIV4
|
RCC.APB1CLKDivider=RCC_HCLK_DIV4
|
||||||
|
@ -148,14 +163,13 @@ RCC.VCOI2SOutputFreq_Value=384000000
|
||||||
RCC.VCOInputFreq_Value=2000000
|
RCC.VCOInputFreq_Value=2000000
|
||||||
RCC.VCOOutputFreq_Value=336000000
|
RCC.VCOOutputFreq_Value=336000000
|
||||||
RCC.VcooutputI2S=192000000
|
RCC.VcooutputI2S=192000000
|
||||||
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2
|
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4
|
||||||
SPI1.CRCCalculation=SPI_CRCCALCULATION_DISABLE
|
SPI2.CalculateBaudRate=10.5 MBits/s
|
||||||
SPI1.CalculateBaudRate=42.0 MBits/s
|
SPI2.DataSize=SPI_DATASIZE_8BIT
|
||||||
SPI1.DataSize=SPI_DATASIZE_8BIT
|
SPI2.Direction=SPI_DIRECTION_1LINE
|
||||||
SPI1.Direction=SPI_DIRECTION_2LINES
|
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler
|
||||||
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler,CRCCalculation
|
SPI2.Mode=SPI_MODE_MASTER
|
||||||
SPI1.Mode=SPI_MODE_MASTER
|
SPI2.VirtualType=VM_MASTER
|
||||||
SPI1.VirtualType=VM_MASTER
|
|
||||||
VP_FATFS_VS_SDIO.Mode=SDIO
|
VP_FATFS_VS_SDIO.Mode=SDIO
|
||||||
VP_FATFS_VS_SDIO.Signal=FATFS_VS_SDIO
|
VP_FATFS_VS_SDIO.Signal=FATFS_VS_SDIO
|
||||||
VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
|
VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
|
||||||
|
|
Loading…
Reference in New Issue