启动dma传输
This commit is contained in:
		
							parent
							
								
									9b5fc13c0c
								
							
						
					
					
						commit
						80b5775885
					
				
							
								
								
									
										52
									
								
								Core/Inc/dma.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								Core/Inc/dma.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | ||||
| /* USER CODE BEGIN Header */ | ||||
| /**
 | ||||
|   ****************************************************************************** | ||||
|   * @file    dma.h | ||||
|   * @brief   This file contains all the function prototypes for | ||||
|   *          the dma.c file | ||||
|   ****************************************************************************** | ||||
|   * @attention | ||||
|   * | ||||
|   * Copyright (c) 2025 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 __DMA_H__ | ||||
| #define __DMA_H__ | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| /* Includes ------------------------------------------------------------------*/ | ||||
| #include "main.h" | ||||
| 
 | ||||
| /* DMA memory to memory transfer handles -------------------------------------*/ | ||||
| 
 | ||||
| /* USER CODE BEGIN Includes */ | ||||
| 
 | ||||
| /* USER CODE END Includes */ | ||||
| 
 | ||||
| /* USER CODE BEGIN Private defines */ | ||||
| 
 | ||||
| /* USER CODE END Private defines */ | ||||
| 
 | ||||
| void MX_DMA_Init(void); | ||||
| 
 | ||||
| /* USER CODE BEGIN Prototypes */ | ||||
| 
 | ||||
| /* USER CODE END Prototypes */ | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #endif /* __DMA_H__ */ | ||||
| 
 | ||||
| @ -42,7 +42,7 @@ | ||||
| /*#define HAL_CORTEX_MODULE_ENABLED   */ | ||||
| /*#define HAL_CRC_MODULE_ENABLED   */ | ||||
| /*#define HAL_DAC_MODULE_ENABLED   */ | ||||
| /*#define HAL_DMA_MODULE_ENABLED   */ | ||||
| #define HAL_DMA_MODULE_ENABLED | ||||
| /*#define HAL_ETH_MODULE_ENABLED   */ | ||||
| /*#define HAL_FLASH_MODULE_ENABLED   */ | ||||
| #define HAL_GPIO_MODULE_ENABLED | ||||
|  | ||||
| @ -53,6 +53,7 @@ void BusFault_Handler(void); | ||||
| void UsageFault_Handler(void); | ||||
| void DebugMon_Handler(void); | ||||
| void SysTick_Handler(void); | ||||
| void DMA1_Channel3_IRQHandler(void); | ||||
| /* USER CODE BEGIN EFP */ | ||||
| 
 | ||||
| /* USER CODE END EFP */ | ||||
|  | ||||
							
								
								
									
										55
									
								
								Core/Src/dma.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								Core/Src/dma.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| /* USER CODE BEGIN Header */ | ||||
| /**
 | ||||
|   ****************************************************************************** | ||||
|   * @file    dma.c | ||||
|   * @brief   This file provides code for the configuration | ||||
|   *          of all the requested memory to memory DMA transfers. | ||||
|   ****************************************************************************** | ||||
|   * @attention | ||||
|   * | ||||
|   * Copyright (c) 2025 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 "dma.h" | ||||
| 
 | ||||
| /* USER CODE BEGIN 0 */ | ||||
| 
 | ||||
| /* USER CODE END 0 */ | ||||
| 
 | ||||
| /*----------------------------------------------------------------------------*/ | ||||
| /* Configure DMA                                                              */ | ||||
| /*----------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| /* USER CODE BEGIN 1 */ | ||||
| 
 | ||||
| /* USER CODE END 1 */ | ||||
| 
 | ||||
| /**
 | ||||
|   * Enable DMA controller clock | ||||
|   */ | ||||
| void MX_DMA_Init(void) | ||||
| { | ||||
| 
 | ||||
|   /* DMA controller clock enable */ | ||||
|   __HAL_RCC_DMA1_CLK_ENABLE(); | ||||
| 
 | ||||
|   /* DMA interrupt init */ | ||||
|   /* DMA1_Channel3_IRQn interrupt configuration */ | ||||
|   HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 5, 0); | ||||
|   HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| /* USER CODE BEGIN 2 */ | ||||
| 
 | ||||
| /* USER CODE END 2 */ | ||||
| 
 | ||||
| @ -20,6 +20,7 @@ | ||||
| #include "main.h" | ||||
| #include "cmsis_os.h" | ||||
| #include "can.h" | ||||
| #include "dma.h" | ||||
| #include "spi.h" | ||||
| #include "tim.h" | ||||
| #include "usart.h" | ||||
| @ -92,6 +93,7 @@ int main(void) | ||||
| 
 | ||||
|   /* Initialize all configured peripherals */ | ||||
|   MX_GPIO_Init(); | ||||
|   MX_DMA_Init(); | ||||
|   MX_SPI1_Init(); | ||||
|   MX_TIM3_Init(); | ||||
|   MX_CAN1_Init(); | ||||
|  | ||||
| @ -25,6 +25,7 @@ | ||||
| /* USER CODE END 0 */ | ||||
| 
 | ||||
| SPI_HandleTypeDef hspi1; | ||||
| DMA_HandleTypeDef hdma_spi1_tx; | ||||
| 
 | ||||
| /* SPI1 init function */ | ||||
| void MX_SPI1_Init(void) | ||||
| @ -81,6 +82,23 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) | ||||
|     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; | ||||
|     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); | ||||
| 
 | ||||
|     /* SPI1 DMA Init */ | ||||
|     /* SPI1_TX Init */ | ||||
|     hdma_spi1_tx.Instance = DMA1_Channel3; | ||||
|     hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; | ||||
|     hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE; | ||||
|     hdma_spi1_tx.Init.MemInc = DMA_MINC_ENABLE; | ||||
|     hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; | ||||
|     hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; | ||||
|     hdma_spi1_tx.Init.Mode = DMA_NORMAL; | ||||
|     hdma_spi1_tx.Init.Priority = DMA_PRIORITY_LOW; | ||||
|     if (HAL_DMA_Init(&hdma_spi1_tx) != HAL_OK) | ||||
|     { | ||||
|       Error_Handler(); | ||||
|     } | ||||
| 
 | ||||
|     __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi1_tx); | ||||
| 
 | ||||
|   /* USER CODE BEGIN SPI1_MspInit 1 */ | ||||
| 
 | ||||
|   /* USER CODE END SPI1_MspInit 1 */ | ||||
| @ -104,6 +122,8 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) | ||||
|     */ | ||||
|     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_7); | ||||
| 
 | ||||
|     /* SPI1 DMA DeInit */ | ||||
|     HAL_DMA_DeInit(spiHandle->hdmatx); | ||||
|   /* USER CODE BEGIN SPI1_MspDeInit 1 */ | ||||
| 
 | ||||
|   /* USER CODE END SPI1_MspDeInit 1 */ | ||||
|  | ||||
| @ -57,7 +57,7 @@ | ||||
| /* USER CODE END 0 */ | ||||
| 
 | ||||
| /* External variables --------------------------------------------------------*/ | ||||
| 
 | ||||
| extern DMA_HandleTypeDef hdma_spi1_tx; | ||||
| /* USER CODE BEGIN EV */ | ||||
| 
 | ||||
| /* USER CODE END EV */ | ||||
| @ -182,6 +182,20 @@ void SysTick_Handler(void) | ||||
| /* please refer to the startup file (startup_stm32f1xx.s).                    */ | ||||
| /******************************************************************************/ | ||||
| 
 | ||||
| /**
 | ||||
|   * @brief This function handles DMA1 channel3 global interrupt. | ||||
|   */ | ||||
| void DMA1_Channel3_IRQHandler(void) | ||||
| { | ||||
|   /* USER CODE BEGIN DMA1_Channel3_IRQn 0 */ | ||||
| 
 | ||||
|   /* USER CODE END DMA1_Channel3_IRQn 0 */ | ||||
|   HAL_DMA_IRQHandler(&hdma_spi1_tx); | ||||
|   /* USER CODE BEGIN DMA1_Channel3_IRQn 1 */ | ||||
| 
 | ||||
|   /* USER CODE END DMA1_Channel3_IRQn 1 */ | ||||
| } | ||||
| 
 | ||||
| /* USER CODE BEGIN 1 */ | ||||
| 
 | ||||
| /* USER CODE END 1 */ | ||||
|  | ||||
| @ -309,6 +309,18 @@ | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
|       <bDave2>0</bDave2> | ||||
|       <PathWithFileName>../Core/Src/dma.c</PathWithFileName> | ||||
|       <FilenameWithoutPath>dma.c</FilenameWithoutPath> | ||||
|       <RteFlg>0</RteFlg> | ||||
|       <bShared>0</bShared> | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>2</GroupNumber> | ||||
|       <FileNumber>7</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
|       <bDave2>0</bDave2> | ||||
|       <PathWithFileName>../Core/Src/spi.c</PathWithFileName> | ||||
|       <FilenameWithoutPath>spi.c</FilenameWithoutPath> | ||||
|       <RteFlg>0</RteFlg> | ||||
| @ -316,7 +328,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>2</GroupNumber> | ||||
|       <FileNumber>7</FileNumber> | ||||
|       <FileNumber>8</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -328,7 +340,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>2</GroupNumber> | ||||
|       <FileNumber>8</FileNumber> | ||||
|       <FileNumber>9</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -340,7 +352,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>2</GroupNumber> | ||||
|       <FileNumber>9</FileNumber> | ||||
|       <FileNumber>10</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -352,7 +364,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>2</GroupNumber> | ||||
|       <FileNumber>10</FileNumber> | ||||
|       <FileNumber>11</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -372,7 +384,7 @@ | ||||
|     <RteFlg>0</RteFlg> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>11</FileNumber> | ||||
|       <FileNumber>12</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -384,7 +396,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>12</FileNumber> | ||||
|       <FileNumber>13</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -396,7 +408,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>13</FileNumber> | ||||
|       <FileNumber>14</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -408,7 +420,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>14</FileNumber> | ||||
|       <FileNumber>15</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -420,7 +432,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>15</FileNumber> | ||||
|       <FileNumber>16</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -432,7 +444,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>16</FileNumber> | ||||
|       <FileNumber>17</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -444,7 +456,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>17</FileNumber> | ||||
|       <FileNumber>18</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -456,7 +468,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>18</FileNumber> | ||||
|       <FileNumber>19</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -468,7 +480,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>19</FileNumber> | ||||
|       <FileNumber>20</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -480,7 +492,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>20</FileNumber> | ||||
|       <FileNumber>21</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -492,7 +504,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>21</FileNumber> | ||||
|       <FileNumber>22</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -504,7 +516,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>22</FileNumber> | ||||
|       <FileNumber>23</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -516,7 +528,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>23</FileNumber> | ||||
|       <FileNumber>24</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -528,7 +540,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>24</FileNumber> | ||||
|       <FileNumber>25</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -540,7 +552,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>25</FileNumber> | ||||
|       <FileNumber>26</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -552,7 +564,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>3</GroupNumber> | ||||
|       <FileNumber>26</FileNumber> | ||||
|       <FileNumber>27</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -572,7 +584,7 @@ | ||||
|     <RteFlg>0</RteFlg> | ||||
|     <File> | ||||
|       <GroupNumber>4</GroupNumber> | ||||
|       <FileNumber>27</FileNumber> | ||||
|       <FileNumber>28</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -592,7 +604,7 @@ | ||||
|     <RteFlg>0</RteFlg> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>28</FileNumber> | ||||
|       <FileNumber>29</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -604,7 +616,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>29</FileNumber> | ||||
|       <FileNumber>30</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -616,7 +628,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>30</FileNumber> | ||||
|       <FileNumber>31</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -628,7 +640,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>31</FileNumber> | ||||
|       <FileNumber>32</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -640,7 +652,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>32</FileNumber> | ||||
|       <FileNumber>33</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -652,7 +664,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>33</FileNumber> | ||||
|       <FileNumber>34</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -664,7 +676,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>34</FileNumber> | ||||
|       <FileNumber>35</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -676,7 +688,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>35</FileNumber> | ||||
|       <FileNumber>36</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -688,7 +700,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>36</FileNumber> | ||||
|       <FileNumber>37</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -700,7 +712,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>5</GroupNumber> | ||||
|       <FileNumber>37</FileNumber> | ||||
|       <FileNumber>38</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -720,7 +732,7 @@ | ||||
|     <RteFlg>0</RteFlg> | ||||
|     <File> | ||||
|       <GroupNumber>6</GroupNumber> | ||||
|       <FileNumber>38</FileNumber> | ||||
|       <FileNumber>39</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -732,7 +744,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>6</GroupNumber> | ||||
|       <FileNumber>39</FileNumber> | ||||
|       <FileNumber>40</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -744,7 +756,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>6</GroupNumber> | ||||
|       <FileNumber>40</FileNumber> | ||||
|       <FileNumber>41</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -756,7 +768,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>6</GroupNumber> | ||||
|       <FileNumber>41</FileNumber> | ||||
|       <FileNumber>42</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -768,7 +780,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>6</GroupNumber> | ||||
|       <FileNumber>42</FileNumber> | ||||
|       <FileNumber>43</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -780,7 +792,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>6</GroupNumber> | ||||
|       <FileNumber>43</FileNumber> | ||||
|       <FileNumber>44</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -792,7 +804,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>6</GroupNumber> | ||||
|       <FileNumber>44</FileNumber> | ||||
|       <FileNumber>45</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -820,7 +832,7 @@ | ||||
|     <RteFlg>0</RteFlg> | ||||
|     <File> | ||||
|       <GroupNumber>8</GroupNumber> | ||||
|       <FileNumber>45</FileNumber> | ||||
|       <FileNumber>46</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -832,7 +844,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>8</GroupNumber> | ||||
|       <FileNumber>46</FileNumber> | ||||
|       <FileNumber>47</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -844,7 +856,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>8</GroupNumber> | ||||
|       <FileNumber>47</FileNumber> | ||||
|       <FileNumber>48</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -856,7 +868,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>8</GroupNumber> | ||||
|       <FileNumber>48</FileNumber> | ||||
|       <FileNumber>49</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -868,7 +880,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>8</GroupNumber> | ||||
|       <FileNumber>49</FileNumber> | ||||
|       <FileNumber>50</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -880,7 +892,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>8</GroupNumber> | ||||
|       <FileNumber>50</FileNumber> | ||||
|       <FileNumber>51</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -892,7 +904,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>8</GroupNumber> | ||||
|       <FileNumber>51</FileNumber> | ||||
|       <FileNumber>52</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -912,7 +924,7 @@ | ||||
|     <RteFlg>0</RteFlg> | ||||
|     <File> | ||||
|       <GroupNumber>9</GroupNumber> | ||||
|       <FileNumber>52</FileNumber> | ||||
|       <FileNumber>53</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -924,7 +936,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>9</GroupNumber> | ||||
|       <FileNumber>53</FileNumber> | ||||
|       <FileNumber>54</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -944,7 +956,7 @@ | ||||
|     <RteFlg>0</RteFlg> | ||||
|     <File> | ||||
|       <GroupNumber>10</GroupNumber> | ||||
|       <FileNumber>54</FileNumber> | ||||
|       <FileNumber>55</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -956,7 +968,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>10</GroupNumber> | ||||
|       <FileNumber>55</FileNumber> | ||||
|       <FileNumber>56</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -968,7 +980,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>10</GroupNumber> | ||||
|       <FileNumber>56</FileNumber> | ||||
|       <FileNumber>57</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -980,7 +992,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>10</GroupNumber> | ||||
|       <FileNumber>57</FileNumber> | ||||
|       <FileNumber>58</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -992,7 +1004,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>10</GroupNumber> | ||||
|       <FileNumber>58</FileNumber> | ||||
|       <FileNumber>59</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -1004,7 +1016,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>10</GroupNumber> | ||||
|       <FileNumber>59</FileNumber> | ||||
|       <FileNumber>60</FileNumber> | ||||
|       <FileType>1</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
| @ -1016,7 +1028,7 @@ | ||||
|     </File> | ||||
|     <File> | ||||
|       <GroupNumber>10</GroupNumber> | ||||
|       <FileNumber>60</FileNumber> | ||||
|       <FileNumber>61</FileNumber> | ||||
|       <FileType>5</FileType> | ||||
|       <tvExp>0</tvExp> | ||||
|       <tvExpOptDlg>0</tvExpOptDlg> | ||||
|  | ||||
| @ -339,7 +339,7 @@ | ||||
|               <MiscControls></MiscControls> | ||||
|               <Define>USE_HAL_DRIVER,STM32F105xC</Define> | ||||
|               <Undefine></Undefine> | ||||
|               <IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;../Middlewares/Third_Party/FreeRTOS/Source/include;../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2;../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM3;..\User</IncludePath> | ||||
|               <IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;../Middlewares/Third_Party/FreeRTOS/Source/include;../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2;../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM3;../User</IncludePath> | ||||
|             </VariousControls> | ||||
|           </Cads> | ||||
|           <Aads> | ||||
| @ -515,6 +515,62 @@ | ||||
|                 </FileArmAds> | ||||
|               </FileOption> | ||||
|             </File> | ||||
|             <File> | ||||
|               <FileName>dma.c</FileName> | ||||
|               <FileType>1</FileType> | ||||
|               <FilePath>../Core/Src/dma.c</FilePath> | ||||
|               <FileOption> | ||||
|                 <CommonProperty> | ||||
|                   <UseCPPCompiler>2</UseCPPCompiler> | ||||
|                   <RVCTCodeConst>0</RVCTCodeConst> | ||||
|                   <RVCTZI>0</RVCTZI> | ||||
|                   <RVCTOtherData>0</RVCTOtherData> | ||||
|                   <ModuleSelection>0</ModuleSelection> | ||||
|                   <IncludeInBuild>1</IncludeInBuild> | ||||
|                   <AlwaysBuild>2</AlwaysBuild> | ||||
|                   <GenerateAssemblyFile>2</GenerateAssemblyFile> | ||||
|                   <AssembleAssemblyFile>2</AssembleAssemblyFile> | ||||
|                   <PublicsOnly>2</PublicsOnly> | ||||
|                   <StopOnExitCode>11</StopOnExitCode> | ||||
|                   <CustomArgument></CustomArgument> | ||||
|                   <IncludeLibraryModules></IncludeLibraryModules> | ||||
|                   <ComprImg>1</ComprImg> | ||||
|                 </CommonProperty> | ||||
|                 <FileArmAds> | ||||
|                   <Cads> | ||||
|                     <interw>2</interw> | ||||
|                     <Optim>0</Optim> | ||||
|                     <oTime>2</oTime> | ||||
|                     <SplitLS>2</SplitLS> | ||||
|                     <OneElfS>2</OneElfS> | ||||
|                     <Strict>2</Strict> | ||||
|                     <EnumInt>2</EnumInt> | ||||
|                     <PlainCh>2</PlainCh> | ||||
|                     <Ropi>2</Ropi> | ||||
|                     <Rwpi>2</Rwpi> | ||||
|                     <wLevel>0</wLevel> | ||||
|                     <uThumb>2</uThumb> | ||||
|                     <uSurpInc>2</uSurpInc> | ||||
|                     <uC99>2</uC99> | ||||
|                     <uGnu>2</uGnu> | ||||
|                     <useXO>2</useXO> | ||||
|                     <v6Lang>0</v6Lang> | ||||
|                     <v6LangP>0</v6LangP> | ||||
|                     <vShortEn>2</vShortEn> | ||||
|                     <vShortWch>2</vShortWch> | ||||
|                     <v6Lto>2</v6Lto> | ||||
|                     <v6WtE>2</v6WtE> | ||||
|                     <v6Rtti>2</v6Rtti> | ||||
|                     <VariousControls> | ||||
|                       <MiscControls></MiscControls> | ||||
|                       <Define></Define> | ||||
|                       <Undefine></Undefine> | ||||
|                       <IncludePath></IncludePath> | ||||
|                     </VariousControls> | ||||
|                   </Cads> | ||||
|                 </FileArmAds> | ||||
|               </FileOption> | ||||
|             </File> | ||||
|             <File> | ||||
|               <FileName>spi.c</FileName> | ||||
|               <FileType>1</FileType> | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,8 +1,8 @@ | ||||
| #include "lcd.h" | ||||
| #include "lcd_font.h" | ||||
| #include <stdlib.h> // 添加标准库以使用 malloc 和 free | ||||
| 
 | ||||
| 
 | ||||
| // 写命令
 | ||||
| // 写命令到LCD
 | ||||
| static void LCD_WriteCommand(uint8_t cmd) { | ||||
|     LCD_DC_LOW(); | ||||
|     LCD_CS_LOW(); | ||||
| @ -10,7 +10,7 @@ static void LCD_WriteCommand(uint8_t cmd) { | ||||
|     LCD_CS_HIGH(); | ||||
| } | ||||
| 
 | ||||
| // 写数据
 | ||||
| // 写数据到LCD
 | ||||
| static void LCD_WriteData(uint8_t data) { | ||||
|     LCD_DC_HIGH(); | ||||
|     LCD_CS_LOW(); | ||||
| @ -18,36 +18,51 @@ static void LCD_WriteData(uint8_t data) { | ||||
|     LCD_CS_HIGH(); | ||||
| } | ||||
| 
 | ||||
| // 写16位数据
 | ||||
| static void LCD_WriteData16(uint16_t data) { | ||||
|     uint8_t buf[2] = {data >> 8, data & 0xFF}; | ||||
| // // 写多个数据到LCD
 | ||||
| // static void LCD_WriteDataBuffer(uint8_t *data, uint16_t size) {
 | ||||
| //     LCD_DC_HIGH();
 | ||||
| //     LCD_CS_LOW();
 | ||||
| //     HAL_SPI_Transmit(&hspi1, data, size, HAL_MAX_DELAY);
 | ||||
| //     LCD_CS_HIGH();
 | ||||
| // }
 | ||||
| 
 | ||||
| // 使用 DMA 写多个数据到 LCD
 | ||||
| static void LCD_WriteDataBuffer_DMA(uint8_t *data, uint16_t size) { | ||||
|     LCD_DC_HIGH(); | ||||
|     LCD_CS_LOW(); | ||||
|     HAL_SPI_Transmit(&hspi1, buf, 2, HAL_MAX_DELAY); | ||||
|     HAL_SPI_Transmit_DMA(&hspi1, data, size); // 使用 DMA 传输
 | ||||
|     while (HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY); // 等待传输完成
 | ||||
|     LCD_CS_HIGH(); | ||||
| } | ||||
| 
 | ||||
| // 修改原来的 LCD_WriteDataBuffer,增加 DMA 支持
 | ||||
| static void LCD_WriteDataBuffer(uint8_t *data, uint16_t size) { | ||||
|     if (size > 64) { // 如果数据量较大,使用 DMA
 | ||||
|         LCD_WriteDataBuffer_DMA(data, size); | ||||
|     } else { // 否则使用普通传输
 | ||||
|         LCD_DC_HIGH(); | ||||
|         LCD_CS_LOW(); | ||||
|         HAL_SPI_Transmit(&hspi1, data, size, HAL_MAX_DELAY); | ||||
|         LCD_CS_HIGH(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // 初始化LCD
 | ||||
| void LCD_Init(void) { | ||||
|     // 复位屏幕
 | ||||
|     LCD_RST_LOW(); | ||||
|     HAL_Delay(10); | ||||
|     HAL_Delay(50); | ||||
|     LCD_RST_HIGH(); | ||||
|     HAL_Delay(10); | ||||
|     HAL_Delay(50); | ||||
| 
 | ||||
|     // 初始化命令序列(以ST7789为例)
 | ||||
|     LCD_WriteCommand(0x36); // Memory Data Access Control
 | ||||
|     LCD_WriteData(0xC0); // RGB Color Order
 | ||||
|     LCD_WriteData(0x60);    // 横屏模式,向右旋转90度
 | ||||
| 
 | ||||
|     LCD_WriteCommand(0x3A); // Interface Pixel Format
 | ||||
|     LCD_WriteData(0x05);    // 16-bit/pixel
 | ||||
|     LCD_WriteData(0x05);    // 16位色
 | ||||
| 
 | ||||
|     LCD_WriteCommand(0xB2); // Porch Setting
 | ||||
|     LCD_WriteData(0x0C); | ||||
|     LCD_WriteData(0x0C); | ||||
|     LCD_WriteData(0x00); | ||||
|     LCD_WriteData(0x33); | ||||
|     LCD_WriteData(0x33); | ||||
|     uint8_t porch[] = {0x0C, 0x0C, 0x00, 0x33, 0x33}; | ||||
|     LCD_WriteDataBuffer(porch, sizeof(porch)); | ||||
| 
 | ||||
|     LCD_WriteCommand(0xB7); // Gate Control
 | ||||
|     LCD_WriteData(0x35); | ||||
| @ -60,8 +75,10 @@ void LCD_Init(void) { | ||||
| 
 | ||||
|     LCD_WriteCommand(0xC2); // VDV and VRH Command Enable
 | ||||
|     LCD_WriteData(0x01); | ||||
| 
 | ||||
|     LCD_WriteCommand(0xC3); // VRH Set
 | ||||
|     LCD_WriteData(0x12); | ||||
| 
 | ||||
|     LCD_WriteCommand(0xC4); // VDV Set
 | ||||
|     LCD_WriteData(0x20); | ||||
| 
 | ||||
| @ -73,97 +90,110 @@ void LCD_Init(void) { | ||||
|     LCD_WriteData(0xA1); | ||||
| 
 | ||||
|     LCD_WriteCommand(0xE0); // Positive Voltage Gamma Control
 | ||||
|     LCD_WriteData(0xD0); | ||||
|     LCD_WriteData(0x04); | ||||
|     LCD_WriteData(0x0D); | ||||
|     LCD_WriteData(0x11); | ||||
|     LCD_WriteData(0x13); | ||||
|     LCD_WriteData(0x2B); | ||||
|     LCD_WriteData(0x3F); | ||||
|     LCD_WriteData(0x54); | ||||
|     LCD_WriteData(0x4C); | ||||
|     LCD_WriteData(0x18); | ||||
|     LCD_WriteData(0x0D); | ||||
|     LCD_WriteData(0x0B); | ||||
|     LCD_WriteData(0x1F); | ||||
|     LCD_WriteData(0x23); | ||||
|     uint8_t gamma_pos[] = {0xD0, 0x04, 0x0D, 0x11, 0x13, 0x2B, 0x3F, 0x54, 0x4C, 0x18, 0x0D, 0x0B, 0x1F, 0x23}; | ||||
|     LCD_WriteDataBuffer(gamma_pos, sizeof(gamma_pos)); | ||||
| 
 | ||||
|     LCD_WriteCommand(0xE1); // Negative Voltage Gamma Control
 | ||||
|     LCD_WriteData(0xD0); | ||||
|     LCD_WriteData(0x04); | ||||
|     LCD_WriteData(0x0C); | ||||
|     LCD_WriteData(0x11); | ||||
|     LCD_WriteData(0x13); | ||||
|     LCD_WriteData(0x2C); | ||||
|     LCD_WriteData(0x3F); | ||||
|     LCD_WriteData(0x44); | ||||
|     LCD_WriteData(0x51); | ||||
|     LCD_WriteData(0x2F); | ||||
|     LCD_WriteData(0x1F); | ||||
|     LCD_WriteData(0x1F); | ||||
|     LCD_WriteData(0x20); | ||||
|     LCD_WriteData(0x23); | ||||
|     uint8_t gamma_neg[] = {0xD0, 0x04, 0x0C, 0x11, 0x13, 0x2C, 0x3F, 0x44, 0x51, 0x2F, 0x1F, 0x1F, 0x20, 0x23}; | ||||
|     LCD_WriteDataBuffer(gamma_neg, sizeof(gamma_neg)); | ||||
| 
 | ||||
|     LCD_WriteCommand(0x21); // Inversion On
 | ||||
|     LCD_WriteCommand(0x21); // Display Inversion On
 | ||||
|     LCD_WriteCommand(0x11); // Sleep Out
 | ||||
|     HAL_Delay(120); | ||||
|     LCD_WriteCommand(0x29); // Display On
 | ||||
| } | ||||
| 
 | ||||
| // 清屏
 | ||||
| void LCD_Clear(uint16_t color) { | ||||
| // 设置显示窗口
 | ||||
| static void LCD_SetAddressWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) { | ||||
|     uint16_t x_start = x + X_OFFSET; | ||||
|     uint16_t x_end = x_start + w - 1; | ||||
|     uint16_t y_start = y + Y_OFFSET; | ||||
|     uint16_t y_end = y_start + h - 1; | ||||
| 
 | ||||
|     LCD_WriteCommand(0x2A); // Column Address Set
 | ||||
|     LCD_WriteData16(X_OFFSET);    // 起始列地址
 | ||||
|     LCD_WriteData16(X_OFFSET + LCD_WIDTH - 1); // 结束列地址
 | ||||
|     uint8_t data_x[] = {x_start >> 8, x_start & 0xFF, x_end >> 8, x_end & 0xFF}; | ||||
|     LCD_WriteDataBuffer(data_x, sizeof(data_x)); | ||||
| 
 | ||||
|     LCD_WriteCommand(0x2B); // Row Address Set
 | ||||
|     LCD_WriteData16(Y_OFFSET);    // 起始行地址
 | ||||
|     LCD_WriteData16(Y_OFFSET + LCD_HEIGHT - 1); // 结束行地址
 | ||||
|     uint8_t data_y[] = {y_start >> 8, y_start & 0xFF, y_end >> 8, y_end & 0xFF}; | ||||
|     LCD_WriteDataBuffer(data_y, sizeof(data_y)); | ||||
| 
 | ||||
|     LCD_WriteCommand(0x2C); // Memory Write
 | ||||
|     for (uint32_t i = 0; i < LCD_WIDTH * LCD_HEIGHT; i++) { | ||||
|         LCD_WriteData16(color); | ||||
| } | ||||
| 
 | ||||
| // 清屏
 | ||||
| // void LCD_Clear(uint16_t color) {
 | ||||
| //     uint8_t color_data[] = {color >> 8, color & 0xFF};
 | ||||
| //     LCD_SetAddressWindow(0, 0, LCD_WIDTH, LCD_HEIGHT);
 | ||||
| 
 | ||||
| //     for (uint32_t i = 0; i < LCD_WIDTH * LCD_HEIGHT; i++) {
 | ||||
| //         LCD_WriteDataBuffer(color_data, 2);
 | ||||
| //     }
 | ||||
| // }
 | ||||
| 
 | ||||
| void LCD_Clear(uint16_t color) { | ||||
|     uint8_t color_data[] = {color >> 8, color & 0xFF}; | ||||
|     LCD_SetAddressWindow(0, 0, LCD_WIDTH, LCD_HEIGHT); | ||||
| 
 | ||||
|     // 创建一个缓冲区,用于存储整屏颜色数据
 | ||||
|     uint32_t buffer_size = LCD_WIDTH * LCD_HEIGHT * 2; // 每个像素 2 字节
 | ||||
|     uint8_t *buffer = malloc(buffer_size); | ||||
|     if (buffer == NULL) return; // 分配失败,直接返回
 | ||||
| 
 | ||||
|     for (uint32_t i = 0; i < buffer_size; i += 2) { | ||||
|         buffer[i] = color_data[0]; | ||||
|         buffer[i + 1] = color_data[1]; | ||||
|     } | ||||
| 
 | ||||
|     // 使用 DMA 传输整个缓冲区
 | ||||
|     LCD_WriteDataBuffer_DMA(buffer, buffer_size); | ||||
| 
 | ||||
|     free(buffer); // 释放缓冲区
 | ||||
| } | ||||
| 
 | ||||
| // 绘制单个像素
 | ||||
| // 绘制像素
 | ||||
| void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color) { | ||||
|     if (x >= LCD_WIDTH || y >= LCD_HEIGHT) return; // 超出屏幕范围则返回
 | ||||
| 
 | ||||
|     LCD_WriteCommand(0x2A); // 设置列地址
 | ||||
|     LCD_WriteData16(X_OFFSET + x); | ||||
|     LCD_WriteData16(X_OFFSET + x); | ||||
| 
 | ||||
|     LCD_WriteCommand(0x2B); // 设置行地址
 | ||||
|     LCD_WriteData16(Y_OFFSET + y); | ||||
|     LCD_WriteData16(Y_OFFSET + y); | ||||
| 
 | ||||
|     LCD_WriteCommand(0x2C); // 写入内存
 | ||||
|     LCD_WriteData16(color); | ||||
|     LCD_SetAddressWindow(x, y, 1, 1); | ||||
|     uint8_t color_data[] = {color >> 8, color & 0xFF}; | ||||
|     LCD_WriteDataBuffer(color_data, 2); | ||||
| } | ||||
| 
 | ||||
| // 在指定位置显示一个字符
 | ||||
| void LCD_DrawChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bgColor) { | ||||
|     if (ch < 32 || ch > 126) return; // 字符范围检查 (ASCII 32-126)
 | ||||
| // // 绘制字符(旋转90度)
 | ||||
| // void LCD_DrawChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bgColor) {
 | ||||
| //     const unsigned char *font = ascii_1206[ch - ' '];
 | ||||
| //     for (uint8_t i = 0; i < FONT_WIDTH; i++) { // 遍历字体宽度
 | ||||
| //         for (uint8_t j = 0; j < FONT_HEIGHT; j++) { // 遍历字体高度
 | ||||
| //             if (font[j] & (1 << i)) { // 行列交换,旋转90度
 | ||||
| //                 LCD_DrawPixel(x + i, y + j, color);
 | ||||
| //             } else {
 | ||||
| //                 LCD_DrawPixel(x + i, y + j, bgColor);
 | ||||
| //             }
 | ||||
| //         }
 | ||||
| //     }
 | ||||
| // }
 | ||||
| 
 | ||||
|     const uint8_t *charData = ascii_1206[ch - 32]; // 获取字符点阵数据
 | ||||
|     for (uint8_t i = 0; i < FONT_HEIGHT; i++) { // 遍历字符的高度
 | ||||
|         uint8_t line = charData[i]; // 获取字符的每一行数据
 | ||||
|         for (uint8_t j = 0; j < FONT_WIDTH; j++) { // 遍历字符的宽度
 | ||||
|             if (line & (1 << j)) { // 判断当前像素是否为1
 | ||||
|                 LCD_DrawPixel(x + j, y + i, color); // 绘制前景色
 | ||||
| // 绘制字符(逆时针旋转90度)
 | ||||
| void LCD_DrawChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bgColor) { | ||||
|     const unsigned char *font = ascii_1206[ch - ' ']; | ||||
|     for (uint8_t i = 0; i < FONT_WIDTH; i++) { // 遍历字体宽度
 | ||||
|         for (uint8_t j = 0; j < FONT_HEIGHT; j++) { // 遍历字体高度
 | ||||
|             if (font[j] & (1 << i)) { // 行列交换,逆时针旋转90度
 | ||||
|                 LCD_DrawPixel(x + j, y - i, color); // 注意坐标变换
 | ||||
|             } else { | ||||
|                 LCD_DrawPixel(x + j, y + i, bgColor); // 绘制背景色
 | ||||
|                 LCD_DrawPixel(x + j, y - i, bgColor); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // 在指定位置显示字符串
 | ||||
| 
 | ||||
| 
 | ||||
| // 绘制字符串(沿y轴绘制)
 | ||||
| void LCD_DrawString(uint16_t x, uint16_t y, const char *str, uint16_t color, uint16_t bgColor) { | ||||
|     y = LCD_HEIGHT-1 -y; | ||||
|     while (*str) { | ||||
|         LCD_DrawChar(x, y, *str, color, bgColor); // 显示单个字符
 | ||||
|         x += FONT_WIDTH; // 移动到下一个字符位置
 | ||||
|         LCD_DrawChar(x, y, *str, color, bgColor); | ||||
|         y -= FONT_WIDTH; // 每个字符向下移动一个字符宽度
 | ||||
|         str++; | ||||
|     } | ||||
| } | ||||
| @ -14,16 +14,21 @@ void Task_Monitor(void *argument) { | ||||
|     (void)argument; // 消除未使用参数的警告
 | ||||
|     const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_MONITOR; // 100Hz
 | ||||
|     uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ | ||||
|     char tick_str[16]; | ||||
|     LCD_Init(); | ||||
|     LCD_Clear(BLACK); | ||||
|     // HAL_Delay(5000); // 延时 1 秒
 | ||||
|     LCD_Clear(RED); | ||||
|     LCD_DrawChar(0, 0, '0', WHITE, BLACK); // 在屏幕上显示字符
 | ||||
|     LCD_DrawString(0, 20, "Hello", WHITE, BLACK); // 在屏幕上显示字符串
 | ||||
|     // LCD_DrawChar(0, 0, '0', WHITE, BLACK); // 在屏幕上显示字符
 | ||||
|     LCD_DrawString(0, 0, "Hello", WHITE, BLACK); // 在屏幕上显示字符串
 | ||||
|     LCD_DrawString(50, 0,"this is sick (DT35-driver)",BLACK,WHITE); | ||||
|     BSP_LED_Set(BSP_LED_RED, BSP_LED_ON, 0); | ||||
|     BSP_LED_Set(BSP_LED_BLUE, BSP_LED_ON, 0); | ||||
|     while (1) { | ||||
|         tick += delay_tick; /* 计算下一个唤醒时刻 */ | ||||
| 
 | ||||
|         sprintf(tick_str, "Tick: %lu", tick); | ||||
|         //展示tick
 | ||||
|         LCD_DrawString(0, 20, tick_str, WHITE, BLACK); // 在屏幕上显示 tick 值
 | ||||
|         // 切换 LED 状态
 | ||||
|         BSP_LED_Set(BSP_LED_GREEN, BSP_LED_TAGGLE, 0); // 50% 占空比
 | ||||
|         osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */ | ||||
|  | ||||
| @ -10,6 +10,17 @@ CAN2.CalculateBaudRate=749999 | ||||
| CAN2.CalculateTimeBit=1333 | ||||
| CAN2.CalculateTimeQuantum=444.44444444444446 | ||||
| CAN2.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate | ||||
| Dma.Request0=SPI1_TX | ||||
| Dma.RequestsNb=1 | ||||
| Dma.SPI1_TX.0.Direction=DMA_MEMORY_TO_PERIPH | ||||
| Dma.SPI1_TX.0.Instance=DMA1_Channel3 | ||||
| Dma.SPI1_TX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE | ||||
| Dma.SPI1_TX.0.MemInc=DMA_MINC_ENABLE | ||||
| Dma.SPI1_TX.0.Mode=DMA_NORMAL | ||||
| Dma.SPI1_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE | ||||
| Dma.SPI1_TX.0.PeriphInc=DMA_PINC_DISABLE | ||||
| Dma.SPI1_TX.0.Priority=DMA_PRIORITY_LOW | ||||
| Dma.SPI1_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority | ||||
| FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE | ||||
| FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL | ||||
| FREERTOS.configTOTAL_HEAP_SIZE=0x1000 | ||||
| @ -20,14 +31,15 @@ Mcu.CPN=STM32F105RBT6 | ||||
| Mcu.Family=STM32F1 | ||||
| Mcu.IP0=CAN1 | ||||
| Mcu.IP1=CAN2 | ||||
| Mcu.IP2=FREERTOS | ||||
| Mcu.IP3=NVIC | ||||
| Mcu.IP4=RCC | ||||
| Mcu.IP5=SPI1 | ||||
| Mcu.IP6=SYS | ||||
| Mcu.IP7=TIM3 | ||||
| Mcu.IP8=USART3 | ||||
| Mcu.IPNb=9 | ||||
| Mcu.IP2=DMA | ||||
| Mcu.IP3=FREERTOS | ||||
| Mcu.IP4=NVIC | ||||
| Mcu.IP5=RCC | ||||
| Mcu.IP6=SPI1 | ||||
| Mcu.IP7=SYS | ||||
| Mcu.IP8=TIM3 | ||||
| Mcu.IP9=USART3 | ||||
| Mcu.IPNb=10 | ||||
| Mcu.Name=STM32F105R(8-B-C)Tx | ||||
| Mcu.Package=LQFP64 | ||||
| Mcu.Pin0=PD0-OSC_IN | ||||
| @ -61,6 +73,7 @@ Mcu.UserName=STM32F105RBTx | ||||
| MxCube.Version=6.14.0 | ||||
| MxDb.Version=DB.6.0.140 | ||||
| NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false | ||||
| NVIC.DMA1_Channel3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true | ||||
| NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false | ||||
| NVIC.ForceEnableDMAVector=true | ||||
| NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false | ||||
| @ -165,7 +178,7 @@ ProjectManager.ToolChainLocation= | ||||
| ProjectManager.UAScriptAfterPath= | ||||
| ProjectManager.UAScriptBeforePath= | ||||
| ProjectManager.UnderRoot=false | ||||
| ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_SPI1_Init-SPI1-false-HAL-true,4-MX_TIM3_Init-TIM3-false-HAL-true,5-MX_CAN1_Init-CAN1-false-HAL-true,6-MX_CAN2_Init-CAN2-false-HAL-true,7-MX_USART3_UART_Init-USART3-false-HAL-true | ||||
| ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_SPI1_Init-SPI1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_CAN1_Init-CAN1-false-HAL-true,7-MX_CAN2_Init-CAN2-false-HAL-true,8-MX_USART3_UART_Init-USART3-false-HAL-true | ||||
| RCC.ADCFreqValue=36000000 | ||||
| RCC.AHBFreq_Value=72000000 | ||||
| RCC.APB1CLKDivider=RCC_HCLK_DIV2 | ||||
| @ -214,3 +227,4 @@ VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 | ||||
| VP_SYS_VS_Systick.Mode=SysTick | ||||
| VP_SYS_VS_Systick.Signal=SYS_VS_Systick | ||||
| board=custom | ||||
| rtos.0.ip=FREERTOS | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 RB
						RB