pauline_o

    1. ST好慢,越变越差了。 9/3865 stm32/stm8 2011-02-22
                                       还是老网站快
    2. stm8s用晶体确实很差! 12/4715 stm32/stm8 2010-11-22
                                       MARK
    3. 请问STM32的库V3.3.0和V3.0.0的区别 11/6896 stm32/stm8 2010-07-04
                                       看这些只要看自己关心的就行了,其余的就算了,时间有限啊。 所以写修改记录应该有个修改索引,不然找死人的。
    4. eboot下实现SDHC的问题(2440) 7/3966 嵌入式系统 2010-06-23
      引用 4 楼 luixing67 的回复: 我也在做SD卡,遇到一大堆问题,楼主的SD 的Clock是多少的,我现在设置FULL SPEED 读数据可以读出来,设置DEFAULT SPEED 读出来全是 0. 还有查找文件的时候,相同情况下 10次才能找到1次,同样的代码。郁闷死了。
      我的PCLK=50MHZ,SDCLK=50MHZ/(5+1). 我也换过其它好几种CLK试过,4G以下卡还是能正常的读取,就是8G的有问题。
    5. 请教版主,stm32里面的CAN设置问题 9/5262 stm32/stm8 2010-06-04
                                        看了一下中文翻译,它有点自相矛盾: 1)在对bxCAN的过滤器组(模式、位宽、FIFO关联、激活和过滤器值)进行初始化前,软件要对CAN_FMR寄存器的FINIT位设置’1’。对过滤器的初始化可以在非初始化模式下进行。 2)不需要在初始化模式下进行过滤器初值的设置,但必须在它处在非激活状态下完成(相应的FACT位为0)。而过滤器的位宽和模式的设置,则必须在初始化模式中进入正常模式前完成。 再看了一下英文原文,第2)段有点问题,不是“则必须在初始化模式中进入正常模式前完成”,应该改为“则必须在进入正常模式前完成”。 第1)段,改为“对过滤器的初始化可以在非初始化模式(睡眠模式)下进行。” 对应于源代码,一般是: /* CAN filter init */   CAN_FilterInitStructure.CAN_FilterNumber=0;   CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;   CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;   CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;   CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;   CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;   CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;   CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;   CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;   CAN_FilterInit(&CAN_FilterInitStructure); //......   //Enter Normal mode from sleep mode   CAN_WakeUp();   即在睡眠模式下初始化CAN过滤器。
    6. #8楼:一般书上都写的很简单,哪怕是备受推崇的何宗键的书,如果按它的搭建开发环境还是很难,最好的入门资料是各个厂家的手册,天嵌有一个专门的wince入门手册,你可以去我的eeworld博客看一下,我发了一篇日志,在最后的评论处有一个链接,到ourdev论坛的,这个是我入门的过程,你可以参考一下,
    7. 请教:关于USART多机通信 7/6583 stm32/stm8 2010-04-16
                                       可以设置一个广播地址,接收到广播地址就全部接受
    8. 引用 8 楼 rushonin 的回复: 引用 6 楼 lth93 的回复: 在dllentry里调用init?成吗? built in 的驱动都会自动执行init的
      应用程序打开才会执行init,除非你在source里定义入口点未init,好像是这样吧
    9. 红外接收头的相关疑问,牛人请指教! 7/3657 嵌入式系统 2010-04-04
      引用 2 楼 lin0119 的回复: 从遥控接收头出来的应该已经把38K的载波过滤掉了,只有信号波形发给单片机。
      那就奇怪了,按照TC9012的资料,1帧也不过33bit的数据,怎么在检测时候会有588个左右的下降沿产生呢,难道是数据头的引导部分在作祟!
    10. 没弄过,楼主最好还是说下待遇吧,呵呵 帮顶下。
    11. JAVA 嵌入式 我该如何选择 9/3698 嵌入式系统 2010-03-08
      引用 6 楼 domworldjohn 的回复: 你们的嵌入式方向应该是ARM+LINUX+QT,我觉得这还是比较好的,但是比较难,就看你的毅力了
      我们学的就是这个,我回去问了。
    12. STR9定时器0捕获功能问题 6/3589 stm32/stm8 2010-03-04
                                       没有这样用,没有用管脚进行中断的计数方式
    13. Linux内核解读入门(申精) 239/66120 Linux与安卓 2010-02-04
      顶起,多谢!
    14. 送分了进者有份啊 54/11282 嵌入式系统 2010-02-01
      怎么和你联系呢?
    15. 这个没办法解决,要看你运行的程序里面的实现了,如果存储内存有明显减小的话,可能是它在对象存储里面放了什么文件,这只是猜测
    16. 伟福仿真器 VW.EXE 支持 V8,V9 有那么难吗? 4/4503 嵌入式系统 2009-12-14
      一般我用伟福主要是为了看时间,其余用哪个仿真器无所谓。
    17. 引用 7 楼 amorous 的回复: 不用买,看2#的资料就行了
      我的资源里头就有相关的下载网页: http://download.eeworld.net/source/1846349
    18. 关于EDA交通灯控制器程序 7/2978 嵌入式系统 2009-11-08
      这个不难,用状态机合适
    19. #include #define NTSTRSAFE_LIB #include #define COM_DRIVER_NAME  L"\\Device\\Serial0"        //要绑定的设备名 //延时用的 #define  DELAY_ONE_MICROSECOND  (-10) #define  DELAY_ONE_MILLISECOND (DELAY_ONE_MICROSECOND*1000) #define  DELAY_ONE_SECOND (DELAY_ONE_MILLISECOND*1000) PDEVICE_OBJECT s_fltobj=NULL;        //全局指针 PDEVICE_OBJECT s_nextobj=NULL;        //全局指针 PDEVICE_OBJECT pCommunicate=NULL;        //全局指针 UNICODE_STRING devicename;                        //定义一个字符串 UNICODE_STRING symboliclinkname;        //定义一个字符串 void ccpUnload(PDRIVER_OBJECT drv);        //动态卸载函数 NTSTATUS ccpAttachAllComs(PDRIVER_OBJECT driver);        //绑定设备函数 NTSTATUS ccpDispatch(PDEVICE_OBJECT device,PIRP irp);        //自定义IRP分发函数 NTSTATUS fengReadComplete(PDEVICE_OBJECT DeviectObject,PIRP Irp,PVOID Context);        //IRP_MJ_READ回调函数 NTSTATUS CreateDevices(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath);        //创建设备用于同ring3应用程序通信 NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)        //所有的驱动都是这个入口函数跟c语言的main函数一样         {         NTSTATUS status;        //定义返回状态数据类型         size_t i;         status = CreateDevices(driver,reg_path);         if (status==STATUS_SUCCESS)                 {                 for(i=0;iMajorFunction[i] = ccpDispatch;        //所有的分发函数都进入ccpDispatch这个函数里面去                         }                 driver->DriverUnload = ccpUnload;        //支持动态卸载(=号后面是卸载函数)                 ccpAttachAllComs(driver);        //绑定设备                 }         return STATUS_SUCCESS;        //返回成功(STATUS_SUCCESS=成功的意思)         } NTSTATUS CreateDevices(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)         {        //创建设备用于同ring3应用程序通信         NTSTATUS status;         RtlInitUnicodeString(&devicename,L"\\Device\\MyDevice");        //初始化设备名称         RtlInitUnicodeString(&symboliclinkname,L"\\??\\MyDeviceName");        //初始化符号连接名称         status = IoCreateDevice(DriverObject,0,&devicename,FILE_DEVICE_UNKNOWN,0,FALSE,&pCommunicate);        //生成设备         if (status != STATUS_SUCCESS)        //如果没有生成成功就返回                 return status;         IoCreateSymbolicLink(&symboliclinkname,&devicename);//符号链接名称//设备名称         pCommunicate->Flags |= DO_BUFFERED_IO;         return status;         } void ccpUnload(PDRIVER_OBJECT drv)        //动态卸载函数         {         LARGE_INTEGER interval;         UNICODE_STRING uniNtNameString;                //定义一个字符串         RtlInitUnicodeString(&uniNtNameString, COM_DRIVER_NAME);        // 初始化一个字符串(就是COM驱动的名字)         IoDetachDevice(s_nextobj);        // 首先解除绑定         interval.QuadPart = (2*1000 * DELAY_ONE_MILLISECOND);        // 睡眠时间(2秒)         KeDelayExecutionThread(KernelMode,FALSE,&interval);                //等待所有irp处理结束         IoDeleteDevice(s_fltobj);        // 删除设备         IoDeleteDevice(pCommunicate);        // 删除设备         } NTSTATUS ccpAttachAllComs(PDRIVER_OBJECT driver)        //绑定设备函数         {         NTSTATUS status;        //定义返回状态数据类型         PFILE_OBJECT fileobj = NULL;        //定义一个设备的文件对象指针         PDEVICE_OBJECT devobj = NULL;        //定义一个设备对象指针         UNICODE_STRING uniNtNameString;                //定义一个字符串         RtlInitUnicodeString(&uniNtNameString, COM_DRIVER_NAME);        // 初始化一个字符串(就是COM驱动的名字)         status=IoGetDeviceObjectPointer(&uniNtNameString, FILE_ALL_ACCESS, &fileobj, &devobj);        //根据设备名字获取设备对象         if(status == STATUS_SUCCESS)        //如果获取设备对象成功                 ObDereferenceObject(fileobj);        //就取消设备的文件对象引用(因为过滤串口不需要文件对象)         status = IoCreateDevice(driver,0,NULL,devobj->DeviceType,0,FALSE,&s_fltobj);        //生成设备         if (status != STATUS_SUCCESS)        //如果没有生成设备就返回                 return status;         // 拷贝重要标志位。         if(devobj->Flags & DO_BUFFERED_IO)                 (s_fltobj)->Flags |= DO_BUFFERED_IO;         if(devobj->Flags & DO_DIRECT_IO)                 (s_fltobj)->Flags |= DO_DIRECT_IO;         if(devobj->Flags & DO_BUFFERED_IO)                 (s_fltobj)->Flags |= DO_BUFFERED_IO;         if(devobj->Characteristics & FILE_DEVICE_SECURE_OPEN)                 (s_fltobj)->Characteristics |= FILE_DEVICE_SECURE_OPEN;         (s_fltobj)->Flags |=  DO_POWER_PAGABLE;         s_nextobj = IoAttachDeviceToDeviceStack(s_fltobj,devobj);        //绑定一个设备到另一个设备上         if (s_nextobj == NULL)                 {                 // 如果绑定失败了,销毁设备,重新来过。                 IoDeleteDevice(s_fltobj);                 s_fltobj = NULL;                 return STATUS_UNSUCCESSFUL;                 }         (s_fltobj)->Flags = (s_fltobj)->Flags & ~DO_DEVICE_INITIALIZING;        //设置这个设备已经启动         return STATUS_SUCCESS;         } NTSTATUS ccpDispatch(PDEVICE_OBJECT device,PIRP irp)        //自定义IRP分发函数         {         PIO_STACK_LOCATION irpsp = IoGetCurrentIrpStackLocation(irp);        //获取当前栈空间         NTSTATUS status;         ULONG i;         if(s_fltobj== device)                 {                 if(irpsp->MajorFunction == IRP_MJ_POWER)                         {                         //如果是电源直接发送,然后返回说已经被处理了                         PoStartNextPowerIrp(irp);                         IoSkipCurrentIrpStackLocation(irp);                         return PoCallDriver(s_nextobj,irp);                         }                 if(irpsp->MajorFunction == IRP_MJ_WRITE)                         {                         ULONG len = irpsp->Parameters.Write.Length;        //获取写入数据的长度                         PUCHAR buf = (PUCHAR)irp->AssociatedIrp.SystemBuffer;        //取得系统缓冲区数据                         for(i=0;iMajorFunction == IRP_MJ_READ)                         {                         //因为读的是需要完成后才能得到,所以用回调函数来获取                         IoCopyCurrentIrpStackLocationToNext(irp);                         IoSetCompletionRoutine(irp, fengReadComplete, device, TRUE, TRUE, TRUE);                         return IoCallDriver(s_nextobj,irp);                         }                 //其它请求直接下发(不禁止也不修改)                 IoSkipCurrentIrpStackLocation(irp);                 return IoCallDriver(s_nextobj,irp);                 }         if(pCommunicate== device)                 {                 if(irpsp->MajorFunction == IRP_MJ_POWER)                         {                         //如果是电源直接发送,然后返回说已经被处理了                         PoStartNextPowerIrp(irp);                         IoSkipCurrentIrpStackLocation(irp);                         return PoCallDriver(pCommunicate->NextDevice,irp);                         }                 if(irpsp->MajorFunction == IRP_MJ_CREATE)                         {                         IoSkipCurrentIrpStackLocation(irp);                         return IoCallDriver(pCommunicate->NextDevice,irp);                         }                 if(irpsp->MajorFunction == IRP_MJ_CLOSE)                         {                         IoSkipCurrentIrpStackLocation(irp);                         return IoCallDriver(pCommunicate->NextDevice,irp);                         }                 //其它请求直接下发(不禁止也不修改)                 IoSkipCurrentIrpStackLocation(irp);                 return IoCallDriver(pCommunicate->NextDevice,irp);                 }         // 如果根本就不在被绑定的设备中,那是有问题的,直接返回参数错误。         irp->IoStatus.Information = 0;         irp->IoStatus.Status = STATUS_INVALID_PARAMETER;         IoCompleteRequest(irp,IO_NO_INCREMENT);         return STATUS_SUCCESS;                } NTSTATUS fengReadComplete(PDEVICE_OBJECT DeviectObject,PIRP Irp,PVOID Context)        //IRP_MJ_READ回调函数         {         PIO_STACK_LOCATION IrpSp;         ULONG i;         IrpSp = IoGetCurrentIrpStackLocation(Irp);         if(NT_SUCCESS( Irp->IoStatus.Status))        //读成功才处理                 {                 PUCHAR buf = (PUCHAR)Irp->AssociatedIrp.SystemBuffer;        //取得系统缓冲区数据                 for(i=0; iIoStatus.Information; i++)                         {                         DbgPrint("%02X, ", buf[i]);                         }                 }         if( Irp->PendingReturned)                 IoMarkIrpPending( Irp);         return Irp->IoStatus.Status;         } 复制代码 改成这样直接蓝屏......why????
    20. 探讨:系统软复位与冷启动的不同 7/3747 嵌入式系统 2009-10-21
      有软复位的. 上电复位入口地址是一样的。 和令启动有不同的地方是有些初始的寄存器值不同。 为了系统更加稳定,我一般在用户关机的时候都会复位一次再进入睡眠模式。嘿嘿~~

最近访客

< 1/1 >

统计信息

已有80人来访过

  • 芯积分:--
  • 好友:--
  • 主题:6
  • 回复:52

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言