这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » (NRF24L01驱动成功)hanshuyujifen2的 ARM DIY进程贴

共119条 8/12 |‹ 6 7 8 9 10 11 ›| 跳转至
高工
2012-04-30 21:55:17     打赏
71楼
一整天,uCGUI移植  道路是曲折的前途是光明的。
代码还没整理好

参考这个文章,只能参考  你要真安上边的来,还是有问题的:
http://www.cnblogs.com/codehxh/archive/2011/07/27/2117659.html

有几个地方我改了,学老王先卖个关子。俗话说:自己琢磨出来的东西才是好东西

早上爬起来就弄这个,差不多的时候出现问题搞不定。
晚上唱了几个歌,换换脑子,回来就找到问题了。。嘿嘿  很简单一个问题

高工
2012-05-01 21:34:21     打赏
72楼
一天半的时间,移植uCGUI到前天移植好的uCOS上。其中坎坷真是难以言表啊!
我用的是ucgui.com网站下载的3.90的源码版。一天半的时间移植成功。
回想下,其实也不难。只要你C语言功底和编程功底够厉害,不难的。

这两天只移植了,还不知道怎么用。下面是移植心得供拍砖:

1、找参考
      我在博客园找到一篇文章,安富莱的人写的。前面讲的挺好的,到了关键点就拉稀了。害得我多条了一下午
2、找文件包含关系
      UCGUI里边包含了好多LCD驱动芯片的驱动。在文件LCDConf.h里边,一根据需要自己选择。
     #define LCD_CONTROLLER     1375
     这个是用来选择LCD驱动芯片的,可以用UCGUI自己带的,如果没有比如我们的SSD1289,只能自己写了。
    这个选择也有一个文件依赖关系的,不像安富莱那人说的要包含那个LCDWin.h文件,这个文件是可以改的。不想说怎么依赖了,谁遇到了仔细找找也是一种提高。
3、精简再精简。再出问题在哪里之后再加进去
      调试就是要找到最关键的地方,去掉干扰
4、坐的时间长了,要换换脑子。
     我昨天是指做不下去了,跟朋友唱歌去了,回来就发现了问题了。。。
     一味地靠时间堆是不行的,要换换脑子换换思路。

两个最牛的飞线,证明是我的。
高清视频在等老王  压缩视频正在传优库





视频在这里 链接

高工
2012-05-02 23:17:18     打赏
73楼
BUG查找中
LCD初始化之后,EEPROM就不好是了。。。。
我说我的代码没问题啊!

还不小心把SMBUS给初始化了,这样EEPROM悲剧地只读了。

同时,还有一个问题出来了。
前两天一直OS和HUI,添加了太多的代码。
以至于现在编译一次都很费劲。于是决定还是先裸奔吧,至少吧UCGUI干掉先不用。硬件驱动起来,赚点分再弄GUI

高工
2012-05-05 21:42:45     打赏
74楼
老王同学
俺出差,请假几天 五六天后继续
关键是坐五六天火车。郁闷

高工
2012-05-05 21:52:13     打赏
75楼
还没录呢。
这几天忙着呢,没时间做实验,so没什么新东西可录的了

高工
2012-05-06 00:33:36     打赏
76楼
打的一本书带上   呵呵


高工
2012-05-11 21:14:09     打赏
77楼
IIC EEPROM 记录开机次数

每次开机时候,从EEPROM中读出一个数值加一之后再写入原地址。
这样可以记录板子复位次数。不是很准,也凑合了。

使用之前需要一个初始化,在EEPROM中要使用的地址上写入00。
我一直难以理解IIC这个总线,代码是抄的。

调试时候的注意事项:
我调试的时候,改变了几次I2C_Ack_Disable/Enable这个东西。
当改成ENABLE的时候,CMU会一直等待ACK。可能是24C02 EEPROM把哪个线拉底了,CMU一直无法获取总线的控制权。复位的时候,24C02不会自动复位。
之后,即使你烧写进去对的程序的时候也读不出来数据。
板子断电再上电,可以解决这个问题。

IIC初始化代码:
//时钟&引脚初始化
void EEPROM_LowLevel_Init()
{
    GPIO_InitTypeDef  GPIO_InitStructure;

      /*!< I2C Periph clock enable */
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
   
      /*!<I2C_SCL_GPIO_CLK, I2C_SDA_GPIO_CLK Periph clock enable */
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //SMB、SCL、SDA都在GPIOB上
 
      /*!< Configure SCL(PB6) & SDA(PB7)*/
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
      GPIO_Init(GPIOB, &GPIO_InitStructure);

}

//IIC初始化
void EEPROM_Init()
{
    I2C_InitTypeDef   I2C_InitStructure;
   
    EEPROM_LowLevel_Init();
    I2C_DeInit(I2C1);   
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_OwnAddress1 = 0x00;
    I2C_InitStructure.I2C_Ack = I2C_Ack_Disable;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_ClockSpeed = 100000;
    I2C_Init(I2C1, &I2C_InitStructure);

    I2C_Cmd(I2C1,ENABLE);   



至于别的读写,我还不是很理解  就不贴出来找抽了
惯例,图:

高工
2012-05-12 21:30:16     打赏
78楼
ADC1采集引脚电压

晚上玩ADC。DMA方式读取引脚电压。
DMA配置如下:
  //外设基地址
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
  //数据存储地址
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;
  //数据方向
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  //缓存大小
  DMA_InitStructure.DMA_BufferSize = 1;
  //外设地址增量
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//DMA_PeripheralInc_Disable;
  //数据地址增量
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
  //外设数据宽度
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  //存储数据宽度
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  //循环采集模式
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  //高优先级
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  //内存到内存
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

ADC配置如下:
  //独立模式
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  //连续扫描
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  //外部触发模式
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  //数据对齐方式
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  //通道号
  ADC_InitStructure.ADC_NbrOfChannel = 1;
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular channel11 configuration */
  //规则转换
  ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_55Cycles5);

由于没有0~3.3V之间的电压,只能用地线和3.3V电源替代了:
接地时候读出数据为0,接3.3电源时读出0X0FFF.不接基本都在乱跳。
图如下:

高工
2012-05-12 23:58:55     打赏
79楼
这里用的fsmc操作,这个函数完全省略。直接lcd-reg=......就可以了。你先了解下fsmc操作。

高工
2012-05-14 21:15:06     打赏
80楼
软解MP3
1、Helix MP3解码器

Helix MP3是一个开源的MP3解码器。提供对MPEG-1、 MPEG-2和MPEG-2.5 的第3层(Layer 3)支持。它支持可变位速率、恒定位速率,以及立体声和单声道音频格式。有关实现和特性的详细信息,请访问 Helix MP3 解码器网站:https://datatype.helixcommunity.org/Mp3dec。

Helix MP3 解码器的源代码是开源代码,受制于源代码随附文件中描述的许可协议。
就是说咱们研究,就免费了。

可从Helix MP3 解码器网站下载代码: 
https://datatype.helixcommunity.org/Mp3dec。

昨天研究一晚上没什么进展。有进展了再分享。

2、音频输出:
使用STM32自带的DAC输出。网上查了下,片子自带的DAC可以驱动耳机,没试过。两个DAC刚好驱动双声道。

3、录音功能实现:
如果板子上的ADC可以实现的话就试试,否则不做。

4、媒体文件读取:
使用SDIO驱动SD卡。板子上有SDIO驱动的SD卡插槽,可作为数据源。
使用FATFS解析文件系统。读取媒体文件。

最新动向:SDIO初始化完成。


SDIO初始化,使用3.5库:
都说3.5库的stm32f10x_sdio.c有问题,至少我今天没碰到:
我使用的几个函数:
SDIO_DeInit,SDIO_Init,SDIO_SetPowerState,SDIO_ClockCmd。。。。。
在初始化之前,发送命令什么的都可以的。
读取Block的时候就遇到了问题。读出的东西全是0,不知道为啥

调用代码:
    if(SD_OK == SD_Init())
    {
        printf("SD卡初始化成功\r\n");
    }

    if(SD_OK == SD_GetCardInfo(&SDCardInfo1))
    {
        printf("成功读取SD卡信息 \n");
        //cid的内容解析还不会,打印出来信息是错的。但这些信息读出来了
        printf("ManufacturerID:%d\r\n",SDCardInfo1.SD_cid.ManufacturerID);
        printf("OEM/Application ID:%d\r\n",SDCardInfo1.SD_cid.OEM_AppliID);
        printf("Product Revision:%d\r\n",SDCardInfo1.SD_cid.ProdRev);
        printf("Product Serial Number:%d\r\n",SDCardInfo1.SD_cid.ProdSN);
        printf("Manufacturing Date:%d\r\n",SDCardInfo1.SD_cid.ManufactDate);   
    }
        //这里读出全是0,有点小问题明天解决
    SD_ReadBlock(0x00, (u32 *)(&buf[0]), 512);

最后,上图:



SDIO驱动代码

共119条 8/12 |‹ 6 7 8 9 10 11 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]