不含stm32 底层的代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MyStm32Code/base/Src/base.c

372 lines
10 KiB

2 years ago
#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 ..... ");
// }