基于 STM32 的电动车控制器软件源代码.docx
- 文档编号:27481260
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:47
- 大小:25.37KB
基于 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!
\n");
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;//外部晶振,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时钟: 72MHz RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;//APB1时钟: 36MHz RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;//APB2时钟: 72MHz 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); } #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_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*/ 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STM32 的电动车控制器软件源代码 电动车 控制器 软件 源代码