基于 STM32 的电动车控制器软件源代码.docx
《基于 STM32 的电动车控制器软件源代码.docx》由会员分享,可在线阅读,更多相关《基于 STM32 的电动车控制器软件源代码.docx(47页珍藏版)》请在冰豆网上搜索。
基于STM32的电动车控制器软件源代码
/*包含头文件----------------------------------------------------------------*/
#include"stm32f1xx_hal.h"
#include"led/bsp_led.h"
#include"usart/bsp_usartx.h"
#include"spiflash/bsp_spiflash.h"
#include"string.h"
#include"key/bsp_key.h"
/*私有类型定义--------------------------------------------------------------*/
/*私有宏定义----------------------------------------------------------------*/
/*私有变量------------------------------------------------------------------*/
uint8_taRxBuffer[FLASH_SECTOR_SIZE*2];
__IOuint32_tDeviceID=0;
__IOuint32_tFlashID=0;
__IOuint8_twrite_finish=0;
/*扩展变量------------------------------------------------------------------*/
/*私有函数原形--------------------------------------------------------------*/
voidSystemClock_Config(void);
/*函数体--------------------------------------------------------------------*/
/**
*函数功能:
主函数.
*输入参数:
无
*返回值:
*说明:
*/
intmain(void)
{
uint8_tj;
/*复位所有外设,初始化Flash接口和系统滴答定时器*/
HAL_Init();
/*配置系统时钟*/
SystemClock_Config();
KEY_GPIO_Init();
/*LED灯初始化*/
LED_GPIO_Init();
/*初始化串口并配置串口中断优先级*/
MX_USARTx_Init();
/*调用格式化输出函数打印输出数据*/
printf("这是一个4Mbyte串行flash(W25Q32)读写测试实验\r\n");
printf("步骤:
1.打开sscom串口调试助手并且配置好参数\r\n");
printf("2.按下KEY1开始擦除串行flash扇区空间,并且必须等待擦除完成\r\n");
printf("3.点击sscom串口调试助手发送烧写字库文件\r\n");
printf("4.漫长的等待烧写完成过程\r\n");
printf("5.烧写完成后按下KEY2读取验证\r\n");
MX_SPIFlash_Init();
DeviceID=SPI_FLASH_ReadDeviceID();
HAL_Delay(100);
FlashID=SPI_FLASH_ReadID();
/*ChecktheSPIFlashID*/
if(FlashID==SPI_FLASH_ID)/*#definesFLASH_ID0XEF4018*/
printf("检测到华邦串行flashW25Q32!
\n");
}
else
while
(1)
printf("获取不到W25Q32ID!
LED1_TOGGLE;
HAL_Delay(1000);
while(KEY1_StateRead()==KEY_UP);
while(KEY1_StateRead()==KEY_DOWN);
printf("开始擦除FLASH\n");
for(j=0;j{SPI_FLASH_SectorErase(FLASH_UNIGBK_ADDR+j*FLASH_SECTOR_SIZE);}printf("擦除扇区完成\r\n");/*使用DMA传输数据到电脑端*/__HAL_UART_CLEAR_IDLEFLAG(&husartx);__HAL_UART_ENABLE_IT(&husartx,UART_IT_IDLE);HAL_UART_Receive_DMA(&husartx,aRxBuffer,FLASH_SECTOR_SIZE*2);//write_finish=1;/*无限循环*/while(1){if(write_finish){__HAL_UART_DISABLE_IT(&husartx,UART_IT_IDLE);printf("字库烧写完成,按下KEY2读取验证\r\n");while(KEY2_StateRead()==KEY_UP);while(KEY2_StateRead()==KEY_DOWN);for(j=0;j{SPI_FLASH_BufferRead(aRxBuffer,FLASH_UNIGBK_ADDR+j*FLASH_SECTOR_SIZE,10);printf("%04x-%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n",j*FLASH_SECTOR_SIZE,\aRxBuffer[0],aRxBuffer[1],aRxBuffer[2],aRxBuffer[3],aRxBuffer[4],\aRxBuffer[5],aRxBuffer[6],aRxBuffer[7],aRxBuffer[8],aRxBuffer[9]);HAL_Delay(100);}write_finish=0;LED1_OFF;LED2_OFF;while(1){LED1_TOGGLE;LED2_TOGGLE;HAL_Delay(1000);}}}}/***函数功能:系统时钟配置*输入参数:无*返回值:无*说明:无*/voidSystemClock_Config(void){RCC_OscInitTypeDefRCC_OscInitStruct;RCC_ClkInitTypeDefRCC_ClkInitStruct;RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;//外部晶振,8MHzRCC_OscInitStruct.HSEState=RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;//9倍频,得到72MHz主时钟HAL_RCC_OscConfig(&RCC_OscInitStruct);RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;//系统时钟:72MHzRCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;//AHB时钟:72MHzRCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;//APB1时钟:36MHzRCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;//APB2时钟:72MHzHAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2);//HAL_RCC_GetHCLKFreq()/10001ms中断一次//HAL_RCC_GetHCLKFreq()/10000010us中断一次//HAL_RCC_GetHCLKFreq()/10000001us中断一次HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);//配置并启动系统滴答定时器/*系统滴答定时器时钟源*/HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);/*系统滴答定时器中断优先级配置*/HAL_NVIC_SetPriority(SysTick_IRQn,2,0);}#include"stm32f1xx_hal.h"/*USERCODEBEGIN0*//*USERCODEEND0*//***InitializestheGlobalMSP.*/voidHAL_MspInit(void){/*USERCODEBEGINMspInit0*//*USERCODEENDMspInit0*/__HAL_RCC_AFIO_CLK_ENABLE();HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);/*Systeminterruptinit*//*MemoryManagement_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(MemoryManagement_IRQn,0,0);/*BusFault_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(BusFault_IRQn,0,0);/*UsageFault_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(UsageFault_IRQn,0,0);/*DebugMonitor_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(DebugMonitor_IRQn,0,0);/*SysTick_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(SysTick_IRQn,0,0);/*USERCODEBEGINMspInit1*//*USERCODEENDMspInit1*/}/*USERCODEBEGIN1*//*USERCODEEND1*//***@}*//***@}*//*Includes------------------------------------------------------------------*/#include"stm32f1xx_hal.h"#include"stm32f1xx.h"#include"stm32f1xx_it.h"#include"usart/bsp_usartx.h"#include"led/bsp_led.h"/*USERCODEBEGIN0*/#include"spiflash/bsp_spiflash.h"/*USERCODEEND0*//*Externalvariables--------------------------------------------------------*/#defineUNIGBK_FILE_SIZE174344uint8_tWrite_Sector_Count=0;externuint8_taRxBuffer[FLASH_SECTOR_SIZE*2];extern__IOuint8_twrite_finish;/******************************************************************************//*Cortex-M3ProcessorInterruptionandExceptionHandlers*//******************************************************************************//***@briefThisfunctionhandlesNonmaskableinterrupt.*/voidNMI_Handler(void){/*USERCODEBEGINNonMaskableInt_IRQn0*//*USERCODEENDNonMaskableInt_IRQn0*//*USERCODEBEGINNonMaskableInt_IRQn1*//*USERCODEENDNonMaskableInt_IRQn1*/}/***@briefThisfunctionhandlesHardfaultinterrupt.*/voidHardFault_Handler(void){/*USERCODEBEGINHardFault_IRQn0*//*USERCODEENDHardFault_IRQn0*/while(1){}/*USERCODEBEGINHardFault_IRQn1*//*USERCODEENDHardFault_IRQn1*/}/***@briefThisfunctionhandlesMemorymanagementfault.*/voidMemManage_Handler(void){/*USERCODEBEGINMemoryManagement_IRQn0*//*USERCODEENDMemoryManagement_IRQn0*/while(1){}/*USERCODEBEGINMemoryManagement_IRQn1*//*USERCODEENDMemoryManagement_IRQn1*/}/***@briefThisfunctionhandlesPrefetchfault,memoryaccessfault.*/voidBusFault_Handler(void){/*USERCODEBEGINBusFault_IRQn0*//*USERCODEENDBusFault_IRQn0*/while(1){}/*USERCODEBEGINBusFault_IRQn1*//*USERCODEENDBusFault_IRQn1*/}/***@briefThisfunctionhandlesUndefinedinstructionorillegalstate.*/voidUsageFault_Handler(void){/*USERCODEBEGINUsageFault_IRQn0*//*USERCODEENDUsageFault_IRQn0*/while(1){}/*USERCODEBEGINUsageFault_IRQn1*//*USERCODEENDUsageFault_IRQn1*/}/***@briefThisfunctionhandlesDebugmonitor.*/voidDebugMon_Handler(void){/*USERCODEBEGINDebugMonitor_IRQn0*//*USERCODEENDDebugMonitor_IRQn0*/while(1){}/*USERCODEBEGINDebugMonitor_IRQn1*//*USERCODEENDDebugMonitor_IRQn1*/}/***@briefThisfunctionhandlesSystemticktimer.*/voidSysTick_Handler(void){/*USERCODEBEGINSysTick_IRQn0*//*USERCODEENDSysTick_IRQn0*/HAL_IncTick();HAL_SYSTICK_IRQHandler();/*USERCODEBEGINSysTick_IRQn1*//*USERCODEENDSysTick_IRQn1*/}/******************************************************************************//*STM32F1xxPeripheralInterruptHandlers*//*AddheretheInterruptHandlersfortheusedperipherals.*//*Fortheavailableperipheralinterrupthandlernames,*//*pleaserefertothestartupfile(startup_stm32f1xx.s).*//******************************************************************************//*USERCODEBEGIN1*/voidUSARTx_IRQHANDLER(void){/*USERCODEBEGINUSART1_IRQn0*//*USERCODEENDUSART1_IRQn0*///HAL_UART_IRQHandler(&husartx);/*USERCODEBEGINUSART1_IRQn1*/if(__HAL_UART_GET_IT_SOURCE(&husartx,USART_IT_IDLE)!=RESET){if(Write_Sector_Count){LED2_ON;if(Write_Sector_Count%2){LED1_OFF;SPI_FLASH_BufferWrite(&aRxBuffer[FLASH_SECTOR_SIZE],FLASH_UNIGBK_ADDR+Write_Sector_Count*FLASH_SECTOR_SIZE,UNIGBK_FILE_SIZE-Write_Sector_Count*FLASH_SECTOR_SIZE);}else{LED1_ON;SPI_FLASH_BufferWrite(aRxBuffer,FLASH_UNIGBK_ADDR+Write_Sector_Count*FLASH_SECTOR_SIZE,UNIGBK_FILE_SIZE-Write_Sector_Count*FLASH_SECTOR_SIZE);}printf("NumberSector:%d\r\n",Write_Sector_Count);HAL_UART_DMAStop(&husartx);write_finish=1;__HAL_UART_CLEAR_IDLEFLAG(&husartx);__HAL_UART_DISABLE_IT(&husartx,UART_IT_IDLE);}}/*USERCODEENDUSART1_IRQn1*/}voidUSARTx_DMAx_CHANNELn_IRQHANDLER(void){/*USERCODEBEGINDMA1_Channel4_IRQn0*//*USERCODEENDDMA1_Channel4_IRQn0*///HAL_DMA_IRQHandler(&hdma_usartx_rx);/*USERCODEBEGINDMA1_Channel4_IRQn1*/if(__HAL_DMA_GET_FLAG(hdma,__HAL_DMA_GET_HT_FLAG_INDEX(&hdma_usartx_rx))!=RESET){if(__HAL_DMA_GET_IT_SOURCE(&hdma_usartx_rx,DMA_IT_HT)!=RESET){/*Clearthehalftransfercompleteflag*/__HAL_DMA_CLEAR_FLAG(hdma,__HAL_DMA_GET_HT_FLAG_INDEX(&hdma_usartx_rx));LED2_ON;SPI_FLASH_BufferWrite(aRxBuffer,FLASH_UNIGBK_ADDR+Write_Sector_Count*FLASH_SECTOR_SIZE,FLASH_SE
SPI_FLASH_SectorErase(FLASH_UNIGBK_ADDR+j*FLASH_SECTOR_SIZE);
printf("擦除扇区完成\r\n");
/*使用DMA传输数据到电脑端*/
__HAL_UART_CLEAR_IDLEFLAG(&husartx);
__HAL_UART_ENABLE_IT(&husartx,UART_IT_IDLE);
HAL_UART_Receive_DMA(&husartx,aRxBuffer,FLASH_SECTOR_SIZE*2);
//write_finish=1;
/*无限循环*/
if(write_finish)
__HAL_UART_DISABLE_IT(&husartx,UART_IT_IDLE);
printf("字库烧写完成,按下KEY2读取验证\r\n");
while(KEY2_StateRead()==KEY_UP);
while(KEY2_StateRead()==KEY_DOWN);
for(j=0;j{SPI_FLASH_BufferRead(aRxBuffer,FLASH_UNIGBK_ADDR+j*FLASH_SECTOR_SIZE,10);printf("%04x-%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n",j*FLASH_SECTOR_SIZE,\aRxBuffer[0],aRxBuffer[1],aRxBuffer[2],aRxBuffer[3],aRxBuffer[4],\aRxBuffer[5],aRxBuffer[6],aRxBuffer[7],aRxBuffer[8],aRxBuffer[9]);HAL_Delay(100);}write_finish=0;LED1_OFF;LED2_OFF;while(1){LED1_TOGGLE;LED2_TOGGLE;HAL_Delay(1000);}}}}/***函数功能:系统时钟配置*输入参数:无*返回值:无*说明:无*/voidSystemClock_Config(void){RCC_OscInitTypeDefRCC_OscInitStruct;RCC_ClkInitTypeDefRCC_ClkInitStruct;RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;//外部晶振,8MHzRCC_OscInitStruct.HSEState=RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;//9倍频,得到72MHz主时钟HAL_RCC_OscConfig(&RCC_OscInitStruct);RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;//系统时钟:72MHzRCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;//AHB时钟:72MHzRCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;//APB1时钟:36MHzRCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;//APB2时钟:72MHzHAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2);//HAL_RCC_GetHCLKFreq()/10001ms中断一次//HAL_RCC_GetHCLKFreq()/10000010us中断一次//HAL_RCC_GetHCLKFreq()/10000001us中断一次HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);//配置并启动系统滴答定时器/*系统滴答定时器时钟源*/HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);/*系统滴答定时器中断优先级配置*/HAL_NVIC_SetPriority(SysTick_IRQn,2,0);}#include"stm32f1xx_hal.h"/*USERCODEBEGIN0*//*USERCODEEND0*//***InitializestheGlobalMSP.*/voidHAL_MspInit(void){/*USERCODEBEGINMspInit0*//*USERCODEENDMspInit0*/__HAL_RCC_AFIO_CLK_ENABLE();HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);/*Systeminterruptinit*//*MemoryManagement_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(MemoryManagement_IRQn,0,0);/*BusFault_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(BusFault_IRQn,0,0);/*UsageFault_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(UsageFault_IRQn,0,0);/*DebugMonitor_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(DebugMonitor_IRQn,0,0);/*SysTick_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(SysTick_IRQn,0,0);/*USERCODEBEGINMspInit1*//*USERCODEENDMspInit1*/}/*USERCODEBEGIN1*//*USERCODEEND1*//***@}*//***@}*//*Includes------------------------------------------------------------------*/#include"stm32f1xx_hal.h"#include"stm32f1xx.h"#include"stm32f1xx_it.h"#include"usart/bsp_usartx.h"#include"led/bsp_led.h"/*USERCODEBEGIN0*/#include"spiflash/bsp_spiflash.h"/*USERCODEEND0*//*Externalvariables--------------------------------------------------------*/#defineUNIGBK_FILE_SIZE174344uint8_tWrite_Sector_Count=0;externuint8_taRxBuffer[FLASH_SECTOR_SIZE*2];extern__IOuint8_twrite_finish;/******************************************************************************//*Cortex-M3ProcessorInterruptionandExceptionHandlers*//******************************************************************************//***@briefThisfunctionhandlesNonmaskableinterrupt.*/voidNMI_Handler(void){/*USERCODEBEGINNonMaskableInt_IRQn0*//*USERCODEENDNonMaskableInt_IRQn0*//*USERCODEBEGINNonMaskableInt_IRQn1*//*USERCODEENDNonMaskableInt_IRQn1*/}/***@briefThisfunctionhandlesHardfaultinterrupt.*/voidHardFault_Handler(void){/*USERCODEBEGINHardFault_IRQn0*//*USERCODEENDHardFault_IRQn0*/while(1){}/*USERCODEBEGINHardFault_IRQn1*//*USERCODEENDHardFault_IRQn1*/}/***@briefThisfunctionhandlesMemorymanagementfault.*/voidMemManage_Handler(void){/*USERCODEBEGINMemoryManagement_IRQn0*//*USERCODEENDMemoryManagement_IRQn0*/while(1){}/*USERCODEBEGINMemoryManagement_IRQn1*//*USERCODEENDMemoryManagement_IRQn1*/}/***@briefThisfunctionhandlesPrefetchfault,memoryaccessfault.*/voidBusFault_Handler(void){/*USERCODEBEGINBusFault_IRQn0*//*USERCODEENDBusFault_IRQn0*/while(1){}/*USERCODEBEGINBusFault_IRQn1*//*USERCODEENDBusFault_IRQn1*/}/***@briefThisfunctionhandlesUndefinedinstructionorillegalstate.*/voidUsageFault_Handler(void){/*USERCODEBEGINUsageFault_IRQn0*//*USERCODEENDUsageFault_IRQn0*/while(1){}/*USERCODEBEGINUsageFault_IRQn1*//*USERCODEENDUsageFault_IRQn1*/}/***@briefThisfunctionhandlesDebugmonitor.*/voidDebugMon_Handler(void){/*USERCODEBEGINDebugMonitor_IRQn0*//*USERCODEENDDebugMonitor_IRQn0*/while(1){}/*USERCODEBEGINDebugMonitor_IRQn1*//*USERCODEENDDebugMonitor_IRQn1*/}/***@briefThisfunctionhandlesSystemticktimer.*/voidSysTick_Handler(void){/*USERCODEBEGINSysTick_IRQn0*//*USERCODEENDSysTick_IRQn0*/HAL_IncTick();HAL_SYSTICK_IRQHandler();/*USERCODEBEGINSysTick_IRQn1*//*USERCODEENDSysTick_IRQn1*/}/******************************************************************************//*STM32F1xxPeripheralInterruptHandlers*//*AddheretheInterruptHandlersfortheusedperipherals.*//*Fortheavailableperipheralinterrupthandlernames,*//*pleaserefertothestartupfile(startup_stm32f1xx.s).*//******************************************************************************//*USERCODEBEGIN1*/voidUSARTx_IRQHANDLER(void){/*USERCODEBEGINUSART1_IRQn0*//*USERCODEENDUSART1_IRQn0*///HAL_UART_IRQHandler(&husartx);/*USERCODEBEGINUSART1_IRQn1*/if(__HAL_UART_GET_IT_SOURCE(&husartx,USART_IT_IDLE)!=RESET){if(Write_Sector_Count){LED2_ON;if(Write_Sector_Count%2){LED1_OFF;SPI_FLASH_BufferWrite(&aRxBuffer[FLASH_SECTOR_SIZE],FLASH_UNIGBK_ADDR+Write_Sector_Count*FLASH_SECTOR_SIZE,UNIGBK_FILE_SIZE-Write_Sector_Count*FLASH_SECTOR_SIZE);}else{LED1_ON;SPI_FLASH_BufferWrite(aRxBuffer,FLASH_UNIGBK_ADDR+Write_Sector_Count*FLASH_SECTOR_SIZE,UNIGBK_FILE_SIZE-Write_Sector_Count*FLASH_SECTOR_SIZE);}printf("NumberSector:%d\r\n",Write_Sector_Count);HAL_UART_DMAStop(&husartx);write_finish=1;__HAL_UART_CLEAR_IDLEFLAG(&husartx);__HAL_UART_DISABLE_IT(&husartx,UART_IT_IDLE);}}/*USERCODEENDUSART1_IRQn1*/}voidUSARTx_DMAx_CHANNELn_IRQHANDLER(void){/*USERCODEBEGINDMA1_Channel4_IRQn0*//*USERCODEENDDMA1_Channel4_IRQn0*///HAL_DMA_IRQHandler(&hdma_usartx_rx);/*USERCODEBEGINDMA1_Channel4_IRQn1*/if(__HAL_DMA_GET_FLAG(hdma,__HAL_DMA_GET_HT_FLAG_INDEX(&hdma_usartx_rx))!=RESET){if(__HAL_DMA_GET_IT_SOURCE(&hdma_usartx_rx,DMA_IT_HT)!=RESET){/*Clearthehalftransfercompleteflag*/__HAL_DMA_CLEAR_FLAG(hdma,__HAL_DMA_GET_HT_FLAG_INDEX(&hdma_usartx_rx));LED2_ON;SPI_FLASH_BufferWrite(aRxBuffer,FLASH_UNIGBK_ADDR+Write_Sector_Count*FLASH_SECTOR_SIZE,FLASH_SE
SPI_FLASH_BufferRead(aRxBuffer,FLASH_UNIGBK_ADDR+j*FLASH_SECTOR_SIZE,10);
printf("%04x-%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n",j*FLASH_SECTOR_SIZE,\
aRxBuffer[0],aRxBuffer[1],aRxBuffer[2],aRxBuffer[3],aRxBuffer[4],\
aRxBuffer[5],aRxBuffer[6],aRxBuffer[7],aRxBuffer[8],aRxBuffer[9]);
write_finish=0;
LED1_OFF;
LED2_OFF;
LED2_TOGGLE;
系统时钟配置
voidSystemClock_Config(void)
RCC_OscInitTypeDefRCC_OscInitStruct;
RCC_ClkInitTypeDefRCC_ClkInitStruct;
RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;//外部晶振,8MHz
RCC_OscInitStruct.HSEState=RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;//9倍频,得到72MHz主时钟
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;//系统时钟:
72MHz
RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;//AHB时钟:
RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;//APB1时钟:
36MHz
RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;//APB2时钟:
HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2);
//HAL_RCC_GetHCLKFreq()/10001ms中断一次
//HAL_RCC_GetHCLKFreq()/10000010us中断一次
//HAL_RCC_GetHCLKFreq()/10000001us中断一次
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);//配置并启动系统滴答定时器
/*系统滴答定时器时钟源*/
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/*系统滴答定时器中断优先级配置*/
HAL_NVIC_SetPriority(SysTick_IRQn,2,0);
/*USERCODEBEGIN0*/
/*USERCODEEND0*/
*InitializestheGlobalMSP.
voidHAL_MspInit(void)
/*USERCODEBEGINMspInit0*/
/*USERCODEENDMspInit0*/
__HAL_RCC_AFIO_CLK_ENABLE();
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);
/*Systeminterruptinit*/
/*MemoryManagement_IRQninterruptconfiguration*/
HAL_NVIC_SetPriority(MemoryManagement_IRQn,0,0);
/*BusFault_IRQninterruptconfiguration*/
HAL_NVIC_SetPriority(BusFault_IRQn,0,0);
/*UsageFault_IRQninterruptconfiguration*/
HAL_NVIC_SetPriority(UsageFault_IRQn,0,0);
/*DebugMonitor_IRQninterruptconfiguration*/
HAL_NVIC_SetPriority(DebugMonitor_IRQn,0,0);
/*SysTick_IRQninterruptconfiguration*/
HAL_NVIC_SetPriority(SysTick_IRQn,0,0);
/*USERCODEBEGINMspInit1*/
/*USERCODEENDMspInit1*/
/*USERCODEBEGIN1*/
/*USERCODEEND1*/
*@}
/*Includes------------------------------------------------------------------*/
#include"stm32f1xx.h"
#include"stm32f1xx_it.h"
/*Externalvariables--------------------------------------------------------*/
#defineUNIGBK_FILE_SIZE174344
uint8_tWrite_Sector_Count=0;
externuint8_taRxBuffer[FLASH_SECTOR_SIZE*2];
extern__IOuint8_twrite_finish;
/******************************************************************************/
/*Cortex-M3ProcessorInterruptionandExceptionHandlers*/
*@briefThisfunctionhandlesNonmaskableinterrupt.
voidNMI_Handler(void)
/*USERCODEBEGINNonMaskableInt_IRQn0*/
/*USERCODEENDNonMaskableInt_IRQn0*/
/*USERCODEBEGINNonMaskableInt_IRQn1*/
/*USERCODEENDNonMaskableInt_IRQn1*/
*@briefThisfunctionhandlesHardfaultinterrupt.
voidHardFault_Handler(void)
/*USERCODEBEGINHardFault_IRQn0*/
/*USERCODEENDHardFault_IRQn0*/
/*USERCODEBEGINHardFault_IRQn1*/
/*USERCODEENDHardFault_IRQn1*/
*@briefThisfunctionhandlesMemorymanagementfault.
voidMemManage_Handler(void)
/*USERCODEBEGINMemoryManagement_IRQn0*/
/*USERCODEENDMemoryManagement_IRQn0*/
/*USERCODEBEGINMemoryManagement_IRQn1*/
/*USERCODEENDMemoryManagement_IRQn1*/
*@briefThisfunctionhandlesPrefetchfault,memoryaccessfault.
voidBusFault_Handler(void)
/*USERCODEBEGINBusFault_IRQn0*/
/*USERCODEENDBusFault_IRQn0*/
/*USERCODEBEGINBusFault_IRQn1*/
/*USERCODEENDBusFault_IRQn1*/
*@briefThisfunctionhandlesUndefinedinstructionorillegalstate.
voidUsageFault_Handler(void)
/*USERCODEBEGINUsageFault_IRQn0*/
/*USERCODEENDUsageFault_IRQn0*/
/*USERCODEBEGINUsageFault_IRQn1*/
/*USERCODEENDUsageFault_IRQn1*/
*@briefThisfunctionhandlesDebugmonitor.
voidDebugMon_Handler(void)
/*USERCODEBEGINDebugMonitor_IRQn0*/
/*USERCODEENDDebugMonitor_IRQn0*/
/*USERCODEBEGINDebugMonitor_IRQn1*/
/*USERCODEENDDebugMonitor_IRQn1*/
*@briefThisfunctionhandlesSystemticktimer.
voidSysTick_Handler(void)
/*USERCODEBEGINSysTick_IRQn0*/
/*USERCODEENDSysTick_IRQn0*/
HAL_IncTick();
HAL_SYSTICK_IRQHandler();
/*USERCODEBEGINSysTick_IRQn1*/
/*USERCODEENDSysTick_IRQn1*/
/*STM32F1xxPeripheralInterruptHandlers*/
/*AddheretheInterruptHandlersfortheusedperipherals.*/
/*Fortheavailableperipheralinterrupthandlernames,*/
/*pleaserefertothestartupfile(startup_stm32f1xx.s).*/
voidUSARTx_IRQHANDLER(void)
/*USERCODEBEGINUSART1_IRQn0*/
/*USERCODEENDUSART1_IRQn0*/
//HAL_UART_IRQHandler(&husartx);
/*USERCODEBEGINUSART1_IRQn1*/
if(__HAL_UART_GET_IT_SOURCE(&husartx,USART_IT_IDLE)!
=RESET)
if(Write_Sector_Count)
LED2_ON;
if(Write_Sector_Count%2)
SPI_FLASH_BufferWrite(&aRxBuffer[FLASH_SECTOR_SIZE],FLASH_UNIGBK_ADDR+Write_Sector_Count*FLASH_SECTOR_SIZE,UNIGBK_FILE_SIZE-Write_Sector_Count*FLASH_SECTOR_SIZE);
LED1_ON;
SPI_FLASH_BufferWrite(aRxBuffer,FLASH_UNIGBK_ADDR+Write_Sector_Count*FLASH_SECTOR_SIZE,UNIGBK_FILE_SIZE-Write_Sector_Count*FLASH_SECTOR_SIZE);
printf("NumberSector:
%d\r\n",Write_Sector_Count);
HAL_UART_DMAStop(&husartx);
write_finish=1;
/*USERCODEENDUSART1_IRQn1*/
voidUSARTx_DMAx_CHANNELn_IRQHANDLER(void)
/*USERCODEBEGINDMA1_Channel4_IRQn0*/
/*USERCODEENDDMA1_Channel4_IRQn0*/
//HAL_DMA_IRQHandler(&hdma_usartx_rx);
/*USERCODEBEGINDMA1_Channel4_IRQn1*/
if(__HAL_DMA_GET_FLAG(hdma,__HAL_DMA_GET_HT_FLAG_INDEX(&hdma_usartx_rx))!
if(__HAL_DMA_GET_IT_SOURCE(&hdma_usartx_rx,DMA_IT_HT)!
/*Clearthehalftransfercompleteflag*/
__HAL_DMA_CLEAR_FLAG(hdma,__HAL_DMA_GET_HT_FLAG_INDEX(&hdma_usartx_rx));
SPI_FLASH_BufferWrite(aRxBuffer,FLASH_UNIGBK_ADDR+Write_Sector_Count*FLASH_SECTOR_SIZE,FLASH_SE
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1