/********************************** (C) COPYRIGHT ******************************* * File Name : main.c * Author : WCH * Version : V1.0.0 * Date : 2021/06/06 * Description : Main program body. *******************************************************************************/ #include "debug.h" #include "tos_k.h" #include "sdio.h" #include "lcd_init.h" #include "lcd.h" #include "pic.h" #include "spi_flash.h" void led_key_init(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_SetBits(GPIOE,GPIO_Pin_2); GPIO_SetBits(GPIOE,GPIO_Pin_3); GPIO_SetBits(GPIOE,GPIO_Pin_4); GPIO_SetBits(GPIOE,GPIO_Pin_5); /* key 1 2 3 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } uint8_t get_key(void) { uint16_t value=0; if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) & GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)\ & GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)) == 0 ) { Delay_Ms(15); if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) & GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)\ & GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)) == 0 ) { value= GPIO_ReadInputData(GPIOA); if((value&0x1)==0) return 1; else if((value&0x2)==0)return 2; else if((value&0x100)==0) return 3; else return 0; } } return 0; } void lcd_test() { u8 i,j; float t=0; LCD_ShowString(0,0,"Welcome TencentOS",WHITE,BLACK,32,0); LCD_ShowString(0,40,"LCD_W:",WHITE,BLACK,16,0); LCD_ShowIntNum(48,40,LCD_W,3,WHITE,BLACK,16); LCD_ShowString(80,40,"LCD_H:",WHITE,BLACK,16,0); LCD_ShowIntNum(128,40,LCD_H,3,WHITE,BLACK,16); LCD_ShowString(80,40,"LCD_H:",WHITE,BLACK,16,0); LCD_ShowString(0,70,"Increaseing Nun:",WHITE,BLACK,16,0); LCD_ShowFloatNum1(128,70,t,4,WHITE,BLACK,16); t+=0.11; for(j=0;j<3;j++) { for(i=0;i<6;i++) { LCD_ShowPicture(40*i,120+j*40,40,40,gImage_1); } } printf("lcd test finish\r\n"); } /********************************************************************* * @fn show_sdcard_info * * @brief SD Card information. * * @return none */ void show_sdcard_info(void) { switch(SDCardInfo.CardType) { case SDIO_STD_CAPACITY_SD_CARD_V1_1:printf("Card Type:SDSC V1.1\r\n");break; case SDIO_STD_CAPACITY_SD_CARD_V2_0:printf("Card Type:SDSC V2.0\r\n");break; case SDIO_HIGH_CAPACITY_SD_CARD:printf("Card Type:SDHC V2.0\r\n");break; case SDIO_MULTIMEDIA_CARD:printf("Card Type:MMC Card\r\n");break; } printf("Card ManufacturerID:%d\r\n",SDCardInfo.SD_cid.ManufacturerID); printf("Card RCA:%d\r\n",SDCardInfo.RCA); printf("Card Capacity:%d MB\r\n",(u32)(SDCardInfo.CardCapacity>>20)); printf("Card BlockSize:%d\r\n\r\n",SDCardInfo.CardBlockSize); } const u8 TEXT_Buf[]={"CH32V307 SPI FLASH W25Qxx"}; void spi_flash_test(void) { u8 datap[SIZE]; u16 Flash_Model; // SPI_Flash_Init(); Delay_Ms(50); Flash_Model = SPI_Flash_ReadID(); switch(Flash_Model) { case W25Q80: printf("W25Q80 OK!\r\n"); break; case W25Q16: printf("W25Q16 OK!\r\n"); break; case W25Q32: printf("W25Q32 OK!\r\n"); break; case W25Q64: printf("W25Q64 OK!\r\n"); break; case W25Q128: printf("W25Q128 OK!\r\n"); break; default: printf("Fail!\r\n"); break; } printf("Start Read W25Qxx before erase....\r\n"); SPI_Flash_Read(datap,0x0,SIZE); for(int16_t i=0;i>20))/2; printf("Sector_Nums:%d\r\n", Sector_Nums); for(i=0; i<512; i++){ buf[i] = i; } for(i=0; i