您尚未登录。

#1 Re: 全志 SOC » 几块钱做一个游戏手柄,附源码。 » 2022-11-20 17:39:02

dg

装上windows后测试效果


游戏试玩效果

#2 全志 SOC » 几块钱做一个游戏手柄,附源码。 » 2022-11-20 17:27:07

dg
回复: 8

受论坛大佬启发
看大家用 f1c100 做街机做的挺爽,特别是受司徒大神启发,见原帖:https://whycan.com/t_6945.html
本人对蓝牙不了解,所以先决定做个有线的练练手也好。

原材料
材料1:Fundiuno joystick shield,请自行搜索,价格基本上几块钱。
b1.png

材料2:STM32最小系统板,也请自行搜索
b2.png

接线
joystick接线方法如下:
b33.png

stm32接线方法:

//Funduino joystick 所用到的所有IO定义如下
/*
	PA0 Y (模拟)  2路ADC
	PA1 X (模拟)
	PA2 A  6个按钮
	PA3 B  
	PA4 C
	PA5 D
	PA6 E
	PA7 F
	PB0 K  1个按钮当Z轴
*/
#define BTN1_Pin 					GPIO_PIN_2
#define BTN1_GPIO_Port 		GPIOA
#define BTN2_Pin 					GPIO_PIN_3
#define BTN2_GPIO_Port 		GPIOA
#define BTN3_Pin 					GPIO_PIN_4
#define BTN3_GPIO_Port 		GPIOA
#define BTN4_Pin 					GPIO_PIN_5
#define BTN4_GPIO_Port 		GPIOA
#define BTN5_Pin				 	GPIO_PIN_6
#define BTN5_GPIO_Port 		GPIOA
#define BTN6_Pin 					GPIO_PIN_7
#define BTN6_GPIO_Port 		GPIOA
//6个按钮定义完成

//K键=Z
#define BTNK_Pin 					GPIO_PIN_0
#define BTNK_GPIO_Port 		GPIOB

接线实物
joystick端:
b4.png

stm32端:
b5.png



程序源码
程序来源于github, 这是原版:https://github.com/vostrenkov/EazyJoy

我修改的版本
https://whycan.com/files/members/1266/EazyJoy.7z

#3 Re: 全志 SOC » 全志V3S移植移远EC200S » 2022-11-15 23:01:19

dg

只要移植一下pppd即可。
好像可以强制指定usb serial驱动的vid/pid,不需要重编内核。

#4 Re: 全志 SOC » 网站需要改革,放开文件下载权限(不需要与积分挂钩) » 2022-11-15 10:52:39

dg

建议晕哥开个广告专栏
随便接广告,全丢到广告专栏,并分好类。
没积分是吧,去主动看广告
看一个广告给1分

#5 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢! » 2022-11-10 11:54:06

dg

用法不对。画背景应该在 WM_EraseBkground 消息里面。(可能有错记不清了)
而不是在 wm_paint 里面。
这样保证背景只画一次,能提高速度。

#6 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-10-24 09:31:20

dg
asror 说:

Is there a user manual of f1c100,not f1c100s?

dont care about the postfix
if you need a user manual, you can download DKTool, the manual is include in the software.
28.png

DKTool : https://whycan.com/t_5733.html

#7 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-10-14 14:40:06

dg

烧完了需重启一下
看1楼,改那2个地方了没有?
另,背光代码是否是这样:fb_f1c100s.c

static pwm_t led_pwm_bl = {
  .virt = 0x01c21000,
  .duty = 100,
  .period = 1000000,
  .channel = 1,
  .polarity = true,
  .pwm_port = &GPIO_PE,
  .pwm_pin = 6,
  .pwm_pin_cfg = 3,
};

#9 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 求助!LWIP 做TCP服务器,同一IP反复连接14次后无法继续连接! » 2022-08-31 21:37:43

dg

lwip 是哪个版本?1.3x, 1.4x ?
另外,是否你的应用里面 lwip 既有服务器,又有客户端?
如果是这样,会触发它的一个bug。

#10 Re: Cortex M0/M3/M4/M7 » stm32f446外接PSRAM的问题 » 2022-08-27 10:01:01

dg

从这个文件看来,PSRAM只需要不在同一次CS中,即可任意换页。
而我的设置,采用的是MCU自己产生的CS信号,量了下波形也是每次发命令就发的CS。
所以应该是可以换页的。不知何故。。。

27.png

#11 Re: Cortex M0/M3/M4/M7 » stm32f446外接PSRAM的问题 » 2022-08-27 09:45:10

dg

写入暂时没问题。主要是读出。
比如连续写了 1.2.3.4.5 共5页。
然后再回读第1页, 发现第1页是第5页的内容。

但如果 写1读1,写2读2,写5读5. 这样操作则数据都是正确的

#12 Cortex M0/M3/M4/M7 » stm32f446外接PSRAM的问题 » 2022-08-26 17:10:38

dg
回复: 3

板子
       单片机:STM32F446
       PSRAM: APS6404L    (PageSize=1024Bytes)

硬件接线
    PB2:       QSPI_CLK    6
    PC11:      QSPI_NCS    1
    PE7:       QSPI_IO0    5
    PE8:      QSPI_IO1    2
    PE9:     QSPI_IO2    3
    PE10:    QSPI_IO3    7

软件环境
        HAL库

问题:

1: 能通信上,但QPI模式只能工作在2线数据, 4线数据则数据不正确
2: 写入后立即读出同一地址的数据没问题;但往前读则读到的数据是最后写入的数据
    猜测是Page的机制问题,如何跨页读取?


初始化代码:

int QSPI_PSRAM_Init(void)  
{
  QSPIHandle.Instance = QUADSPI;	
        
  QSPIHandle.Init.ClockPrescaler     = 2;   
  QSPIHandle.Init.FifoThreshold      = 4;
  QSPIHandle.Init.SampleShifting     = QSPI_SAMPLE_SHIFTING_NONE;
  QSPIHandle.Init.FlashSize          = 22;//64Mbits=8Mbtye=2^23.size取22。
  QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_2_CYCLE;     
  QSPIHandle.Init.ClockMode          = QSPI_CLOCK_MODE_0;          
  QSPIHandle.Init.FlashID            = QSPI_FLASH_ID_2;            
  QSPIHandle.Init.DualFlash          = QSPI_DUALFLASH_DISABLE;       //禁止双闪存模式
		
  if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK)
  {
    return PSRAM_ERR_INIT;
  }
	
  QSPI_PSRAM_Resetenable(&QSPIHandle);
  QSPI_PSRAM_Reset(&QSPIHandle);
  HAL_Delay(1);
  
  return PSRAM_OK;
}


void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
   //static DMA_HandleTypeDef hdma;
	
  if(hqspi->Instance==QUADSPI)
  {
    /* USER CODE END QUADSPI_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_QSPI_CLK_ENABLE();
    /* Reset the QuadSPI memory interface */
    __HAL_RCC_QSPI_FORCE_RESET();
    __HAL_RCC_QSPI_RELEASE_RESET();		
		
    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_GPIOE_CLK_ENABLE();
    __HAL_RCC_GPIOC_CLK_ENABLE();
		
    /* Enable DMA clock */
    QSPI_DMA_CLK_ENABLE(); 		
		
    /**QUADSPI GPIO Configuration
    PB2     ------> QUADSPI_CLK
    PE7     ------> QUADSPI_BK2_IO0
    PE8     ------> QUADSPI_BK2_IO1
    PE9     ------> QUADSPI_BK2_IO2
    PE10     ------> QUADSPI_BK2_IO3
    PC11     ------> QUADSPI_BK2_NCS
    */
    GPIO_InitStruct.Pin = GPIO_PIN_2;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF9_QSPI;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL; //GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF10_QSPI;
    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_11;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF9_QSPI;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    /* USER CODE BEGIN QUADSPI_MspInit 1 */

    /* USER CODE END QUADSPI_MspInit 1 */
		
    HAL_NVIC_SetPriority(QUADSPI_IRQn, 0x0F, 0);
    HAL_NVIC_EnableIRQ(QUADSPI_IRQn);
		
    //中断使能
    //__HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC);
  }

}


读写代码

int QSPI_PSRAM_ReadPage(QSPI_HandleTypeDef *hQspi,uint8_t *pData,uint32_t FirstAddr, uint32_t BufSize)
{
	QSPI_Send_CMD(hQspi,PSRAM_CMD_READ_QUAD,FirstAddr,PSRAM_QPI_READ_DUMCYCLES,QSPI_INSTRUCTION_4_LINES,QSPI_ADDRESS_1_LINE,QSPI_ADDRESS_24_BITS,QSPI_DATA_2_LINES,BufSize);
	return _Read(hQspi,pData);
}

int QSPI_PSRAM_WritePage(QSPI_HandleTypeDef *hQspi,uint8_t *pData,uint32_t FirstAddr, uint32_t BufSize)
{
	QSPI_Send_CMD(hQspi,PSRAM_CMD_WRITE_QUAD,FirstAddr,PSRAM_QPI_WRITE_DUMCYCLES,QSPI_INSTRUCTION_4_LINES,QSPI_ADDRESS_1_LINE,QSPI_ADDRESS_24_BITS,QSPI_DATA_2_LINES,BufSize);
	hQspi->Instance->DLR = BufSize-1;
	return _Write(hQspi,pData); 
}


测试代码:

这样读写是成功的:

	for (i=0; i<8; i++)
	{
		memset(temp,i%0xff,1024);
		r1 = QSPI_PSRAM_WritePage(&QSPIHandle,(uint8_t*)temp,i*1024,1024);
		
		memset(temp, 0, 1024);
		r1 = QSPI_PSRAM_ReadPage(&QSPIHandle,(uint8_t*)temp, i*1024, 1024);
		
		//测试发现:写1块立即读该块,都是成功的!
		if (temp[123]!=(i%0xff))
		{
			e++;
			printf("err:%d times, i=%d -->",e, i);    //只要不打这个就是好的	
		}
	}

这样写,再读,读到的数据就总是最后写入的数据:

        //写入:
	for (i=0; i<8; i++)
	{
		memset(temp,i%0xff,1024);
		QSPI_PSRAM_WritePage(&QSPIHandle,(uint8_t*)temp,i*1024,1024);
	}

        //读出:
	for (i=0; i<8; i++)
	{
		memset(temp, 0, 1024);
		QSPI_PSRAM_ReadPage(&QSPIHandle,(uint8_t*)temp, i*1024, 1024);
		if (temp[30]!=(i%0xff))
                {
                   printf("%4d: ",i*1024);
		   ShowBuffer(temp,32);
                 }
	}

#13 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-07-27 09:36:22

dg

to 楼上:我没备份了,没想到第一测试就成功烧进去了,原始固件就被干掉了。没来得及。
最简单的方式,我觉得是你买一片空白的SPI Flash换上去,旧的留着用flash烧写器读出。
淘宝搜那种十几块的烧写器即可读。

#14 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-07-24 14:53:52

dg

触摸屏型号分析
从开机的数据抓包解码后看,确定是GT911
开机时查询8140寄存器,触摸屏回复“911”
23.png

再分析它取数据的抓包:
24.png
取一次数据清一次数据

正好手头有usb转iic小工具,写个测试代码试试看:
26.png

测试读取坐标正常:
25.png

#15 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-07-22 13:51:06

dg

to: 楼上,F1C100, 200 ~ 600 都能用,都是同一系列,代码相同
不同的只是ram大小,最高频率等

#16 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-07-20 23:04:47

dg

触屏研究

为了研究它的触屏用的啥,再上某宝买一个逻辑分析器:
21.png

很简单就装上了,抓包如下:
20.png

看起来每秒大约33帧触摸的数据包报上来。

用 I2C decoder解码一下:
22.png

从 814E 寄存器取数据。
明天再分析是哪个触屏IC。

#17 Re: 全志 SOC » F1C100s UART寄存器 » 2022-06-30 14:57:30

dg

它有基地址。偏移地址一样。基地址不一样。
#define UART0_REG_BASE      0x01C25000
#define UART1_REG_BASE      0x01C25400
#define UART2_REG_BASE      0x01C25800

#19 Re: 全志 SOC » 请问裸机f1c100s+lvgl可以屏幕旋转90°吗 » 2022-06-28 17:02:08

dg

@smiletiger
裸机请问你如何跟踪进去的?

#20 Re: 全志 SOC » 发生一件很奇怪的事情,不知道问题出在哪里,大家帮忙看一下? » 2022-06-27 16:05:28

dg
用户层只传了3个参数
int main(int argc, char *argv[])
{
	unsigned long arg[3];
        ...
        arg[2] = 1; //只设置一个图层即当前图层
        ...
}
//内核层取4个?
	ubuffer[0] = *(unsigned long *)karg;
	ubuffer[1] = (*(unsigned long *)(karg + 1));
	ubuffer[2] = (*(unsigned long *)(karg + 2));
	ubuffer[3] = (*(unsigned long *)(karg + 3));

#21 Re: 全志 SOC » 发生一件很奇怪的事情,不知道问题出在哪里,大家帮忙看一下? » 2022-06-27 10:44:38

dg

2个结构体的定义完全一样吗?
字节对齐选项是一样的吗?
定义完全一样,字节对齐选项一样,就不存在内容对不上的问题

另外,从用户态的数据转到内核态。有没有 copy from/to user ?
如果没有也有问题。可能一方的内存已经释放了,内容比较已经没有意义了。

#22 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-06-26 02:00:06

dg
aozima 说:

检查下是不是还需要心跳,以及硬件驱动这边要有帧信号上报。

谢谢你提醒,确实如此

#23 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-06-26 01:00:58

dg

移植成功了!
原来是没有移植 lv_tick_inc(1); 在 os tick 里面加上这句。
就不会只刷1帧了。

#24 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-06-25 21:41:36

dg

移植LVGL8
把 lvgl 8.3 移上去。能显示一帧,然后就不再显示。
对 lvgl 底层原理不甚了解,暂时未解决。

17.png


移植LVGL6
暂不知道如何解决ver8.x只显示一帧的问题
再移植一个6.x试试,仍然只显示一帧
我在这里打印出一个点,发现串口一直有收到,说明程序是没有死的

void UserEntryLoop(void)
{
  for (;;) {
    target_wdt_feed();
		
    // 循环间隔
    sys_delay(5);
    lv_task_handler();
		
    lcnt++;
    if (lcnt>=100) {
	printf(".");
	lcnt = 0;
    }
  }
}

18.jpg

哪位知道为啥只绘一帧?

#25 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-06-24 14:02:02

dg
jordonwu 说:

@dg
这个屏有uart 作为console输出调试log吗?

有输出 TX,没有输入 RX。
如果你焊接技术好,可以引出来,我看了一下,RX的CPU对应脚位没接线。

#26 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-06-22 14:05:12

dg
memory 说:

楼主牛逼, 闲鱼卖家下架了,不知道还有没有

myxiaonia 说:

原价确实是300多

@memory  @myxiaonia
要是有时间一起研究,我可去拍2块新的,赞助你们各1块。有兴趣否?

#27 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2022-06-21 22:08:18

dg

终于编过去了,确实要放bsp下。感谢 @WangYao
路径有点长:
15.png

下载到板子里面也可以运行:
16.png

屏幕是白色条纹闪烁
应该是屏的参数不对
继续研究

#29 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2022-06-21 11:16:36

dg

使用 scons 也编不过
13.png

不过随便写几个变量,rt studio能编过,说明代码没问题
只是链接时找不到这几个变量在哪里定义的
14.png

#31 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-06-20 19:27:30

dg

红蓝交换问题搞定:

解决方法,参考这个帖子:https://whycan.com/t_7511.html

#33 Re: 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-06-19 22:00:47

dg

如果没有了,你可以去买个新的
我手上的这个触摸屏坏了,所以咸鱼卖家只要100多一点
买新的还能有好的触摸屏,也是不错的

1_20220619-2202.jpg

具体型号:DC10600M101_1111_OC

这个芯片的,应该有多款,但我不清楚它的产品线,我手上这款肯定是

#34 全志 SOC » 偶尔在某鱼上找了一块F1C600成品板,带10寸屏,这下可以愉快的玩板子喽~~ » 2022-06-19 16:11:48

dg
回复: 31

起因:
      一直想找一块简单好用的ARM板子,只做显示和简单应用
      有一天在某宝上搜各种派时,发现荔枝派这个好东西...
      当时好想买来玩一玩,可惜不配大屏,自己点屏又没信心
      进而搜到本网站,只是一直不敢下决心买来测试,只是默默的看各位大神的表演


好久以后:
      早几天没事搜搜某鱼,发现有人卖这个:

     1_20220619-1515.png

     于是问卖家是什么芯片的,卖家看了一下,回我说 F1C600
     what how ? 这么简单就找到了?简直不敢相信
     于是,果断下单买之。。。

研究阶段:

     没几天就到货了,卖家诚不欺我。果然是F1C600
     2.jpg

     3.jpg

     4.jpg

     仔细对比了一下线路图和原理图,发现居然USB口已经预留出来了
     焊上排针,做了一个USB座子。
     按照之前帖子的方法,把MISO也引出来,方便随时能拉低。

     5.png

     USB是4根线,不接VCC没事的,实际就用3根:
     6.jpg

     拉低,再开机,usb马上找到!太好了!!  smile 
     7.jpg

     接着下载大神的裸奔程序:
     8.jpg

     重新开机:
     9.jpg

修改记录:

     大神的裸奔程序地址:
     https://gitee.com/xuyao2020/F1C100s_with_Keil_RTX4_emWin5?_from=gitee_search

     由于原来只支持800*480显示屏,目前这块板子配的是 1024*600 的,需要稍稍修改下代码。
     代码不多,就几行:

    第1处修改:位于:lcd_cfg.h 

     

         #define LCD_PANEL_XSIZE   (1024)
         #define LCD_PANEL_YSIZE   (600)
         #define LCD_PANEL_BITPP   (16)
         #define LCD_PANEL_BYTEPP  (2)
     

      第2处修改:位于:fb_f1c100s.c 第40行后面新增 

     

        #if (LCD_PANEL_XSIZE == 1024) && (LCD_PANEL_YSIZE == 600)
        #define FB_LCD_XSIZE    (LCD_PANEL_XSIZE)        
        #define FB_LCD_YSIZE    (LCD_PANEL_YSIZE)
        #define LCD_CTRL_BPP    (LCD_PANEL_BITPP)
        #define LCD_BYTE_PP     (LCD_PANEL_BYTEPP)
        #define PIXEL_CLOCK     (33000000) 
        #endif
     

存在的问题:

  1. 跑emwin动画时速度有点卡,也许是没有开双缓冲。

  2. fb时钟跑33M以上就黑屏了。

  3. Red和Blue反了,暂时不知如何修改,若有哪位大神搞定受累回个帖子

运行的视频:


     

     

#35 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 有没有支持墨水屏的GUI呀 » 2020-06-27 16:54:25

dg

你好,好的gui肯定不是全屏刷新的,必须带gui局部刷新功能。
gui内部会计算脏区域然后只刷新需要刷的部分。
想弄简单的先可以试试ucgui。

#36 Re: PN532/MFRC522/MFRC523/MFRC500/ » PN532怎么修改keyA控制区keyB? » 2018-11-22 15:58:59

dg

修改keya,keyb和控制区,就是修改密钥了。
必须先通过keyb认证。然后直接写第3块即可。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn