#include "base.h" uint8_t MyBuffer[4096] ={0}; // #define USE_USB_HS extern osSemaphoreId_t elog_dma_lockHandle; int _write(int fd, char *ch, int len) { if (osOK == osSemaphoreAcquire(elog_dma_lockHandle, osWaitForever)) { // #ifdef LOG_MENU_485 // log_menu_send_enable(); // #endif HAL_UART_Transmit_DMA(&huart1, (uint8_t *)ch, len); } return len; } uint8_t test_send_buf[8] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x04, 0x44, 0x09}; uint8_t test_send_buf_2[6] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x04}; uint8_t test_rcv_buf[14] = {0}; uint8_t test_rcv_buf_2[13] = {0}; void MY_INIT( ) { // SDRAM_Init(); // HAL_Delay(100); // SDRAM_Test(); } static void Default_Task_Init() { log_i(" GCC Version -> %d ",__GNUC__); // log_i(" GCC SDRAM_BANK_ADDR -> %d\n",SDRAM_BANK_ADDR); // my_eeprom.init(); // // uint8_t a[2] = { 0xFF, 0xFF }; // // Eeprom_Transmit( eeprom, &a, 2 ); // // osDelay(5); // // Eeprom_Begin_Rcv( eeprom, test_rcv_buf, 1); // // osDelay(5); // //初始化SDRAM模块 // extern MY_SDRAM_TypeDef my_sdram; my_sdram.init(); // SDRAM_Init(); if (my_sdram.test(32)){ // if (SDRAM_Test(32)){ log_i( "SDRAM 32 Bytes Test OK ..."); }else{ log_i( "SDRAM 32 Bytes Test Faiure ..."); } uint8_t *ex_buf; ex_buf=mymalloc(SRAMEX,512); //申请一个扇区的缓存 if (ex_buf != NULL) log_i("Malloc SRAMEX, Test ->>> PASS ! ..."); myfree(SRAMEX,ex_buf); if (ex_buf == NULL) log_i("Malloc Free OK ..."); my_nand.init(); while(FTL_Init()) //检测NAND FLASH,并初始化FTL { log_w("NAND Error!"); HAL_Delay(500); log_w("Please Check"); HAL_Delay(500); } // my_nand.init(); log_i("NAND ID : %08X " , my_nand.id ); log_i("NAND Size : %dMB " , (my_nand.block_totalnum/1024)*(my_nand.page_mainsize/1024)*my_nand.block_pagenum); //显示NAND容量 log_i("NAND total Block Num: %d , page bytes %d , good block %d , valid sector Num: %d " , my_nand.block_totalnum , my_nand.page_mainsize, my_nand.good_blocknum,my_nand.valid_blocknum ); if(my_nand.id==MT29F16G08ABABA) //NAND为MT29F16G08ABABA { log_i("NAND Type : MT29F16G08ABABA 16GB" ); } else if(my_nand.id==W29N01GVSIAA) //NAND为W29N01GVSIAA { log_i("NAND Type : W29N01GVSIAA 1GB" ); }else if (my_nand.id==W29N01HVSINA) //NAND为 W29N01HVSINA { log_i("NAND Type : W29N01HVSINA 512MB" ); } else { log_e("NAND Type : Error" ); } // uint8_t *nand_sector0_buf; // nand_sector0_buf = malloc(512); // FTL_ReadSectors(nand_sector0_buf,2,NAND_ECC_SECTOR_SIZE,1);//预先读取扇区0到备份区域,防止乱写导致文件系统损坏. spiflash_init(); log_i("SPI FLASH Type : %02X ", g_spiflash_type); // UI_Port(); // 初始化触摸屏/ // GTP_Init_Panel(); // Disable_NAND_CS(); // // /* LCD 端口初始化 */ LCD_Init( ); log_i(" LTDC id %04X *** " , my_ltdc.id); log_i(" Layer Addrr %08X %08X " , my_lcd.layeraddr[0],my_lcd.layeraddr[1]); log_i(" Layer hsw vsw %d %d " , my_ltdc.hsw,my_ltdc.vsw); DMA2D_Fill( (uint32_t) my_lcd.layeraddr[0], 480, 272, 0, DMA2D_ARGB8888, LCD_COLOR_ORANGE ); DMA2D_Fill( (uint32_t) my_lcd.layeraddr[1], 480, 272, 0, DMA2D_ARGB8888, LCD_COLOR_GREEN ); // // DMA2D_MemCopy(DMA2D_ARGB8888, my_lcd.layeraddr[1], my_lcd.layeraddr[0], // // 480,272,0,0); // LTDC_Select_Layer(0); LCD_DrawLine(100,100,200,200); // // LCD_Fill(100,100,300,250, LCD_COLOR_GREEN); LCD_DisplayStringLine( 1, (uint8_t* )"LTDC TEST" ); LCD_DisplayStringLine_EN_CH( 2, (uint8_t* )"中"); // GTP_Init_Panel(); // log_i( "touch ic version %s", tp_dev.ic_version); // DrawChar( 20, 20, &("LTDC TEST") ); // LCD_DisplayNumber( 2, 789,10 ); // LCD_DisplayNumber( 3, 666.99,10 ); // LCD_SetTransparency(0, 255); // // LTDC_Clear(LCD_COLOR_GREEN); // LTDC_FillBuffer(0, LCD_FB_START_ADDRESS, 480, 272, 0, LCD_COLOR_GREEN); // LTDC_FillBuffer(1, LCD_FB_START_ADDRESS+(LCD_GetXSize()*LCD_GetYSize()*4), 480, 272, 0, LCD_COLOR_GREEN); // LTDC_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex); // // /* 选择LCD第一层 */ // LCD_SelectLayer(0); // // /* 第一层清屏,显示全黑 */ // LCD_Clear(LCD_COLOR_BLACK); // // /* 选择LCD第二层 */ // LCD_SelectLayer(1); // // /* 第二层清屏,显示全黑 */ // LCD_Clear(LCD_COLOR_TRANSPARENT); // // // /* 配置第一和第二层的透明度,最小值为0,最大值为255*/ // LCD_SetTransparency(0, 255); // LCD_SetTransparency(1, 0); // log_i("lcd set layer Clear... ok...... "); // // /* 选择LCD第一层 */ // LCD_SelectLayer(0); // // /* 清屏,显示全黑 */ // LCD_Clear(LCD_COLOR_GRAY); // // /*设置字体颜色及字体的背景颜色(此处的背景不是指LCD的背景层!注意区分)*/ // LCD_SetColors(LCD_COLOR_WHITE,LCD_COLOR_BLACK); // // /*选择字体*/ // LCD_SetFont(&LCD_DEFAULT_FONT); // LCD_DisplayStringLine(1,(uint8_t* )"BH 5.0 inch LCD para: 正"); // LCD_DisplayStringLine(2,(uint8_t* )"Image resolution:800x480 px"); // LCD_DisplayStringLine(3,(uint8_t* )"Touch pad:5 point touch supported"); // LCD_DisplayStringLine(4,(uint8_t* )"Use STM32-LTDC directed driver,"); // LCD_DisplayStringLine(5,(uint8_t* )"no need extern driver,RGB888,24bits data bus"); // LCD_DisplayStringLine(6,(uint8_t* )"Touch pad use IIC to communicate"); // Palette_Init(); // 有中文字符,还得解决 // Enable_NAND_CS(); // my_led.init(); // my_led.port( 200); // led_set_state(LED_SEQ_0, LED_STATE_FLICKER_SLOW); // led_set_state(LED_COLOR_GREEN, LED_STATE_FLICKER_SLOW); RTOS_Port(); osTimerStart( measureTimerHandle, 3000 ); // SD_Test(); // test_Port(); // MX_USB_DEVICE_Init(); } void StartDefaultTask(void *argument) { // uart6_power_enable(); Init_Logger(); log_i(" *** System is initiating *** "); Default_Task_Init(); // MX_USB_DEVICE_Init(); /* USB 初始化需要写在任务中 */ for (;;) { osDelay(1000 ); } } void measureTimer_Callback(void *argument) { log_i("measureTimer ........................... "); } void measureTask(void *argument) { for (;;) { // log_i("measure task .... "); osDelay(2000); } } void USART1_IRQHandler(void) { if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) != RESET) { osSemaphoreRelease(elog_dma_lockHandle); huart1.gState = HAL_UART_STATE_READY; __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_TC); } HAL_UART_IRQHandler(&huart1); } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { // if (huart->Instance == huart3.Instance) // { // log_i("....huart3 rx callback.... " ); // // Oscar_Rcv_Cplt_Callback( oscar ); // // Viper_Rcv_Cplt_Callback( viper ); // // Sample_Rcv_Cplt_Callback( sample ); // __HAL_UART_CLEAR_FLAG(&huart3, UART_FLAG_RXNE); // } } // void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) // { // if (huart->Instance == huart3.Instance) // { // /* 拷贝数据 到菜单 */ // log_i("huart3 idle -> ****** HAL_UARTEx_RxEventCallback "); // __HAL_UART_CLEAR_IDLEFLAG(&huart3); // } // } void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { // if (huart->Instance == huart3.Instance) // { // // max3160_485_receive_mode(); // // huart3.gState = HAL_UART_STATE_READY; // __HAL_UART_CLEAR_FLAG(&huart3, UART_FLAG_TC); // } } static void Hardware_Init(void) { /*中断优先级分组*/ /*硬件初始化1*/ /* ......*/ /*硬件初始化n*/ } void Soft_Reboot() { __set_FAULTMASK(1);//关闭总中断 NVIC_SystemReset();//请求单片机重启 } // FATFS fs; /* FatFs文件系统对象 */ // FIL fnew; /* 文件对象 */ // FRESULT res_flash; /* 文件操作结果 */ // UINT fnum; /* 文件成功读写数量 */ // BYTE ReadBuffer[1024]={0}; /* 读缓冲区 */ // BYTE WriteBuffer[] = "这是一个测试程序\r\n"; // // /* 挂载外部flash */ // res_flash = f_mount( &fs,"1:",1); // // log_i(" mount res %08X \r\n",NAND_ReadID()); // log_i(" mount res %d \r\n", res_flash); // // /* 如果没有文件系统就格式化创建创建文件系统 */ // if(res_flash == FR_NO_FILESYSTEM) // { // log_i("fmount no file system"); // /* 格式化 */ // res_flash=f_mkfs("1:",FM_ANY,0,MyBuffer,_MIN_SS); // FM_ANY 不能为0 // if(res_flash == FR_OK) // { // log_i(" mkfs format ok ! " ); // // 格式化后,先取消挂载 / // res_flash = f_mount(NULL,"1:",1); // // 重新挂载 // res_flash = f_mount(&fs,"1:",1); // log_i("fmount OK.. %d", res_flash); // } // else // { // log_i(" format failure .... %d ",res_flash); // } // } // else if(res_flash != FR_OK) // { // // 红灯常亮 // log_i("fmount failure"); // } // /* 打开文件,如果没有文件就创建 */ // res_flash = f_open(&fnew, "1:FatFs.txt", FA_CREATE_ALWAYS | FA_WRITE ); // log_i(" f_open %d \r\n",res_flash); // if ( res_flash == FR_OK ) // { // /* 将指定存储区内容写入到文件内 */ // res_flash = f_write(&fnew,WriteBuffer,sizeof(WriteBuffer),&fnum); // log_i(" f_write %d \r\n",res_flash); // if(res_flash == FR_OK) // { // /* 蓝灯亮 */ // log_i("write file success ... "); // } // else // { // /* 不再读写,关闭文件 */ // f_close(&fnew); // /* 红灯常亮 */ // log_i("write file failure"); // } // /* 不再读写,关闭文件 */ // f_close(&fnew); // } // else // { // log_i("write file failure ..... "); // }