STM32 虚拟串口win7(64位)或XP驱动
奋斗STM32开发板Tiny NRF24L01转USB虚拟串口例程手册

奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验NRF24L01+转 USB 虚拟串口实验实验平台:奋斗版STM32开发板Tiny 实验内容:板子通过USB加电后,先向串口1输出一串测试数据,然后USB被PC识 别出来,虚拟出一个串口号给这个USB设备,此时可以通过在PC端的串口助手类 软件选择该串口号。
进入串口软件界面,可以通过软件无线收发一帧长度最长 为32字节的数据。
该例程可以和V3及MINI板的NRF24L01 UCGUI例程配合使用。
预先需要掌握的知识 2.4G通信模块NRF24L01 1. 产品特性2.4GHz 全球开放ISM 频段,最大0dBm 发射功率,免许可证使用 支持六路通道的数据接收 低工作电压:1.9 1.9~3.6V 低电压工作 高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置1Mbps或者2Mbps的空中传输速率) 多频点:125 频点,满足多点通信和跳频通信需要 超小型:内置2.4GHz天线,体积小巧,15x29mm(包括天线) 低功耗:当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗。
低应用成本:NRF24L01 集成了所有与RF协议相关的高速信号处理部分,比如:自动重发丢失数据包和自动产生应答信号等, NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口, 便于使用低成本单片机。
便于开发:由于链路层完全集成在模块上,非常便于开发。
自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制 自动存储未收到应答信号的数据包 自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程 载波检测—固定频率检测 内置硬件CRC 检错和点对多点通信地址控制 数据包传输错误计数器及载波检测功能可用于跳频设置 可同时设置六路接收通道地址,可有选择性的打开接收通道 标准插针Dip2.54MM 间距接口,便于嵌入式应用2.基本电气特性淘宝店铺:1奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验3. 引脚定义:4.工作方式NRF2401有工作模式有四种: 收发模式 配置模式 空闲模式 关机模式 工作模式由CE 和寄存器内部PWR_UP、PRIM_RX 共同控制,见下表:淘宝店铺:2奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验4.1 收发模式收发模式有Enhanced ShockBurstTM收发模式、ShockBurstTM收发模式和直接收发模式三种,收发模式由器件配置字决定,具体 配置将在器件配置部分详细介绍。
STM32实验板串口下载教程

STM32实验板串口下载教程一、软件安装如图1所示,将USB下载线一头插入实验板左上USB口,并且把两个BOOT跳线设置为图中方式。
然后将USB下载线另一头插入电脑USB口,观察实验板电源灯是否点亮。
图1 实验板下载示意图鼠标右键点击桌面计算机图标,选择菜单项“管理”,弹出计算机管理窗口如图2所示。
点击设备管理器栏目,如果实验板正常工作,将能看到图2中所示的USB虚拟串口。
图2 实验板连接电脑后的虚拟串口如果windows提示有未识别的usb设备并寻求驱动,这时还需安装PL2303的windows 驱动如图3所示。
图3 课程资料中的PL2303驱动安装包驱动安装完成并顺利识别出实验板串口后,再安装FLASH Loader Demo下载器软件如图4所示。
图4 Flash Loader Demo下载器软件安装包打开安装好之后的Flash Loader Demo软件,如图5所示:图5 下载器软件界面在下载器初始界面,程序会自动识别出计算机中所有串口,并选择第一个可用串口。
如果是笔记本电脑,插上实验板之后通常就只有一个实验板串口,下载器启动后会将其自动选上。
如果下载器启动后没有选上串口,很可能实验板连接不正常或该串口正被其他程序占用。
开始下载程序时,先按一次实验板复位键,然后鼠标点击界面中的“Next”按钮,若弹出图6画面,再按一次实验板复位键,并迅速点击界面上的“Next”按钮。
最后进入图7所示画面表示下载器已连接上实验板上的STM32器件,可以开始下载程序了。
图6 请按一次复位键图7 准备开始下载程序点击“Next”到下一界面,显示下载器连接的器件类型,再次点击“Next”到图8所示画面。
这时就可以选择我们自己编译出来的hex文件了。
这里,可以先尝试下载一个TEST.hex 测试文件看看实验板是否工作正常。
TEST.hex文件位置可见图4。
注意下载选项“Jump to the user program”可以在下载完后自动运行程序,方便大家测试。
windows下虚拟串口驱动开发

现在介绍在windows XP下开发虚拟串口的方法。
可以开发一个虚拟串口,将读写请求传递给USB驱动,这样就可以利用现成的串口调试工具向USB设备读取了。
1、DDK串口开发框架DDK对串口驱动提供了专门接口。
只要编写的驱动满足这些接口,并按照串口标准的命名方法,不管是真实的串口设备,还是虚拟设备,Windows操作系统都会认为这个设备是一个标准的串口设备。
用标准的串口调试工具都可以与这个设备进行通信。
1、1 串口驱动的入口函数本章的实例程序是在HelloWDM驱动的基础上修改而来,入口函数依然是DriverEntry,在DriverEntry函数中指定各种IRP的派遣函数,以及AddDevice 例程、卸载例程等。
[cpp]view plaincopy1./************************************************************************2.* 函数名称:DriverEntry3.* 功能描述:初始化驱动程序,定位和申请硬件资源,创建内核对象4.* 参数列表:5. pDriverObject:从I/O管理器中传进来的驱动对象6. pRegistryPath:驱动程序在注册表的中的路径7.* 返回值:返回初始化驱动状态8.*************************************************************************/9.#pragma INITCODE10.extern"C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,11. IN PUNICODE_STRING pRegistryPath)12.{13. KdPrint(("Enter DriverEntry\n"));14.15. pDriverObject->DriverExtension->AddDevice = HelloWDMAddDevice;16. pDriverObject->MajorFunction[IRP_MJ_PNP] = HelloWDMPnp;17. pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = HelloWDMDispatchControlp;18. pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloWDMCreate;19. pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloWDMClose;20. pDriverObject->MajorFunction[IRP_MJ_READ] = HelloWDMRead;21. pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloWDMWrite;22. pDriverObject->DriverUnload = HelloWDMUnload;23.24. KdPrint(("Leave DriverEntry\n"));25.return STATUS_SUCCESS;26.}其中在AddDevice例程中,需要创建设备对象,这些都是和以前的HelloWDM驱动程序类似。
STM32串行驱动12864液晶

STM32串⾏驱动12864液晶⾃⼰参考⼤神们的程序改写的液晶驱动,希望对有需要的⼈能有帮助#include "stm32f10x.h"static __IO uint32_t TimingDelay;void RCC_Configuration(void);void Delay(__IO uint32_t nTime);#define Line1 0x80//液晶第⼀⾏#define Line2 0x90//液晶第⼆⾏#define Line3 0x88//液晶第三⾏#define Line4 0x98//液晶第四⾏#define LCD_IO GPIOE //我⽤的是E.2 E.3 E.4 E.5 E.6#define CS GPIO_Pin_2#define RW GPIO_Pin_3#define CLK GPIO_Pin_4#define PSB GPIO_Pin_5#define RST GPIO_Pin_6#define SET(n) GPIO_SetBits(GPIOE,n) //将对应管脚输出⾼电平#define RESET(n) GPIO_ResetBits(GPIOE,n)//输出低电平#define CMD (uint32_t)0xf8000000 //串⾏写⼊的是命令要先写⼊0xf8 #define DATE (uint32_t)0xfa000000 // 串⾏写⼊数据要先写⼊0xfavoid LCD_IOinit_OUT() //推挽输出模式,管脚配置,不多解释,库函数有{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LCD_IO, &GPIO_InitStructure);}void LCD_Write(uint32_t cmd,uint8_t ddata)//LCD 写函数{uint32_t temp=cmd;uint32_t i;RESET(CS); //⽚选拉低temp|=((uint32_t)(ddata&(uint8_t)0xf0)<<16)+((uint32_t)(ddata&(uint8_t)0x0f)<<12);SET(CS); //⽚选拉⾼,开始传输数据for(i=0;i<24;i++){if(temp&0x80000000)SET(RW); //取出最⾼位,如果是1,那么RW就写1 else RESET(RW); //如果是0 RW就写0SET(CLK);//向液晶写数据是在下降沿写⼊的Delay(2);//稍作延时RESET(CLK);//拉低产⽣下降沿,写⼊数据temp=temp<<1;//左移⼀位,写⼊下⼀位}RESET(CS); //拉低⽚选,写⼊数据完毕}void Display(uint8_t addr,uint8_t *hz){LCD_Write(CMD,addr);Delay(3);while(*hz!='\0'){LCD_Write(DA TE,*hz);hz++;Delay(3);}}void LCD_init()//液晶初始化{RESET(CS); //拉低⽚选RESET(PSB);//PSB拉低,表⽰是串⾏,拉⾼则是并⾏RESET(RST);//拉低RSTDelay(100);SET(RST);Delay(40);LCD_Write(CMD,0x30);//8位数据传输Delay(40);LCD_Write(CMD,0x0c);//显⽰开,游标开Delay(40);LCD_Write(CMD,0x01);//清屏Delay(40);LCD_Write(CMD,0x06);//进⼊点设定AC+1Delay(40);}int main(){RCC_Configuration();SysTick_Config(72000); //配置SYSTICK时钟节拍为1ms⼀次LCD_IOinit_OUT();LCD_init();while(1){Display(Line1,"你妹");Display(Line2,"你妹");Display(Line3,"你妹妹");Display(Line4,"完事了,哈哈哈哈哈");}}void RCC_Configuration(void){SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE); }void Delay(__IO uint32_t nTime){TimingDelay = nTime;while(TimingDelay != 0);}void TimingDelay_Decrement(void){if (TimingDelay != 0x00){TimingDelay--;}}/*temp|=((uint32_t)(ddata&(uint8_t)0xf0)<<16)+((uint32_t)(ddata&(uint8_t)0x0f)<<12);重点解释⼀下这⾥,从串⾏时序图中可以看出,发送⼀个指令需要三个字节,第⼀个是0xf8或者0xfa这个根据你要发送的是命令还是数据⽽定,然后发送下⼀个数据的⾼四位和第四位,但是数据都是在⾼四位上⾯,⽤51的话我们要分三次发送,但是32的话⼀个字节可以是32位的/所以我们⼀次就能完成,这也是为什么下⾯的i<24的原因因为最后的8位没有⽤,例如:我们发送指令0x35,则应该是这样0xf8然后0x30然后0x50,这个应该很好理解所以看⼀下上⾯的语句⾸先我们cmd的值应该为0xf8000000,这个宏定义有的,这是发送命令然后我们让cmd=temp;在把temp和后⾯的计算结果做按位或运算.⾸先看这个(uint32_t)(ddata&(uint8_t)0xf0)<<16)我们的ddtate是0x35他和0xf0按位与之后/变为0x30然后左移16位变成0x30 0000;再强制转换为32位,就把⾼位补零变为0x00 30 0000再看这句话(uint32_t) (ddata&(uint8_t)0x0f)<<12)我们的ddtate是0x35他和0x0f按位与/之后变为0x05,左移12位0x05 000 强制转换为32位⾼位补零0x000 05 000 /在和前⾯的相加就是0x00 30 0000+0x000 05 000=0x0030 5000然后在和前⾯的0xf8000000按位或变为0xf830 5000 液晶读这个数据的时候是⼋位⼋位的读取所以在液晶看来是分四次的0xf8 0x30 0x50 0x00显然后⼋位没⽤所以我们只取前⾯的24位//应该能看懂了把结合时序图还有延时⼀定要精确⼤家有看不懂的可以给我留⾔*/。
STM32串口通信程序及下载步骤

STM32串口程序及下载步骤一、时钟定义void RCC_Configuration(void){ErrorStatus HSEStartUpStatus;//将外设RCC寄存器重设为缺省值RCC_DeInit();// 设置外部高速晶振(HSE)RCC_HSEConfig(RCC_HSE_ON);// 等待HSE起振HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS){// 使能或者失能预取指缓存FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);// 设置代码延时值FLASH_SetLatency(FLASH_Latency_2);// 设置AHB时钟(HCLK): HCLK = SYSCLKRCC_HCLKConfig(RCC_SYSCLK_Div1);// 设置高速AHB时钟(PCLK2): PCLK2 = HCLKRCC_PCLK2Config(RCC_HCLK_Div1);//设置低速AHB时钟(PCLK1): PCLK1 = HCLK/2RCC_PCLK1Config(RCC_HCLK_Div2);// 设置PLL时钟源及倍频系数// PLLCLK = HSE*PLLMul = 8*9 = 72MHzRCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//使能 PLLRCC_PLLCmd(ENABLE);//检查指定的RCC标志位设置与否// Wait till PLL is readywhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // 设置系统时钟(SYSCLK)RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//返回用作系统时钟的时钟源// Wait till PLL is used as system clock sourcewhile(RCC_GetSYSCLKSource() != 0x08);}}二、中断定义void NVIC_Configuration(void){#ifdef VECT_TAB_RAM// Set the Vector Tab base at location at 0x20000000NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else// Set the Vector Tab base at location at 0x80000000NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);#endifNVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);}三、串口定义void USART_Configuration(void){//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC _APB2Periph_AFIO, ENABLE);//USART1_TX PA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);//USART1_RX PA.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);//Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1//USART 初始化设置USART_ART_BaudRate = 9600;//一般设置为9600;USART_ART_WordLength = USART_WordLength_8b;USART_ART_StopBits = USART_StopBits_1;USART_ART_Parity = USART_Parity_No;USART_ART_HardwareFlowControl =USART_HardwareFlowControl_None;USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启接收中断USART_Cmd(USART1, ENABLE); //使能串口}四、接收中断u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节.//接收状态//bit7,接收完成标志//bit6,接收到0x0d//bit5~0,接收到的有效字节数目u8 USART_RX_STA=0; //接收状态标记void USART1_IRQHandler(void) //串口1中断服务程序 {u8 Res;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾){Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据if((USART_RX_STA&0x80)==0)//接收未完成{if(USART_RX_STA&0x40) //接收到了0x0d{if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始else USART_RX_STA|=0x80; //接收完成了}else //还没收到0X0D{if(Res==0x0d)USART_RX_STA|=0x40;else{USART_RX_BUF[USART_RX_STA&0X3F]=Res ;USART_RX_STA++;if(USART_RX_STA>63)USART_RX_STA=0; //接收数据错误,重新开始接收}}}}}五、主函数while(1){if(USART_RX_STA&0x80){len=USART_RX_STA&0x3f;//得到此次接收到的数据长度printf("\n您发送的消息为:\n");for(t=0;t<len;t++){USART1->DR=USART_RX_BUF[t];while((USART1->SR&0X40)==0);//等待发送结束}printf("\n\n");//插入换行USART_RX_STA=0;}else{times++;if(times%200==0)printf("请输入数据,以回车键结束\n");Delay(0xFFFF);}}}备注:本代码基于stm32f103RBT6,开发环境keil4 。
mega2560在win764位安装驱动成功

mega2560在win764位安装驱动成功1、APM2.52主芯片是Atmega2560,插上USB数据线后,在电脑上会被识别出一个串口设备,当然这个是要安装驱动才能用的,怎样安装驱动呢?首先将下面这个驱动文件放到你电脑上:Arduino MEGA 2560.inf(3.24 KB, 下载次数: 199)如果是完整版的操作系统,连接APM与USB数据线之后,到“我的电脑”->“属性”->“设备管理器”,找到新加入的硬件mega2560,选择“更新驱动程序”,然后选择刚刚下载的驱动程序文件即可,安装完成后可以在设备管理器中看到一个COM口。
2、如果是Ghost的系统或者精简版的系统,由于删除了大量的驱动,往往会导致安装驱动程序失败。
针对这种情况,以64位的Ghost 版win7系统为例,说一下如何安装驱动。
首先下载下面这两个文件,解压。
mdmcpq.inf_amd64_neutral_fbc4a14a6a13d0c8.rar(50.67 KB, 下载次数: 197)usbser.rar(16.26 KB, 下载次数: 134)然后替换mdmcpq.inf,mdmcpq.PNF,usbser.sys三个文件到目录:C:\Windows\System32\DriverStore\FileRepository\mdmcpq. inf_amd64_neutral_fbc4a14a6a13d0c8再替换usbser.sys文件到/system/driver 目录,替换mdmcpq.inf到/system/inf目录。
再重新执行第1步所述的安装步骤即可。
Ghost版本的win7,需要自建两个文件夹,在system32中需要取得管理员权限建立文件夹(右键管理员取得所有权限)。
STM32如何使用串口下载程序

第1章如何使用串口下载程序
1.1安装USB转串口驱动
秉火的STM32开发板用的USB转串口的驱动芯片是CH340,要使用串口得先在电脑中安装USB转串口驱动—CH340版本。
驱动可在网上搜索下载或者使用我们光盘里面提供的。
WIN7用户请用管理员身份安装。
如果不能安装成功,请先百度查找原因自行解决。
1.2硬件连接
用USB线连接电脑和开发板的USB转串口接口:USB TO UART,给开发板上电。
如果USB转串口驱动安装成功,USB线跟板子连接没有问题,在计算机->管理->设备管理器->端口中可识别到串口。
图1识别到USB转串口端口
如果识别不了串口,请检查USB线是否完好,可换一根USB线试试。
1.3开始下载
打开mcuisp软件,配置如下:①搜索串口,设置波特率、②选择要下载的HEX文件、③校验、编程后执行、④DTR低电平复位,RTS高电平进入bootloader、⑤开始编程。
如果出现一直连接的情况,按一下开发板的复位键即可。
图2ISP下载配置
图3ISP下载成功。
64位win7旗舰版安装MSCOMM32.OCX的方法

64位win7旗舰版安装MSCOMM32.OCX的⽅法MSCOMM32.OCXmscomm32.ocx是ActiveX公⽤控制模块,可⽤于Visual Basic 6.0程序的MSComm控制。
当你的电脑弹出提⽰“mscomm32.ocx丢失”或“⽆法找到mscomm32.ocx”等错误问题,请下载绿⾊资源⽹为你提供的该⽂件,适⽤于winxp和win7系统。
MSCOMM32.OCX是VB的⼀个串⼝控件。
如果你的系统没有它,基于它的⼩程序将不能⽤。
串⼝控制控件MSCOMM32.OCX,⽤于编写串⼝控制程序需要调⽤,很⽅便的哦。
注册MSComm32控件,⽹上下载这个控件,然后把它拷贝到到C:\Windows\system32⽂件夹下,我装的是64位的Win7系统,是在C:\Windows\sysWOW64⽂件夹下,然后打开cmd,写⼊代码 regsvr32 C:\Windows\system32\MSComm32.ocx然后按enter会提⽰你注册成功C:\Windows\sysWOW64这个⽬录就是专门为32位的运⾏库准备的⽬录,很多软件需要32位的运⾏库,都需要将32位的库放到这个⽬录⾥⾯,如果是64位库直接放system32即可。
最近想学习⼀下上位机的编程语⾔,也就是VB VC C# Labview之类的。
但是,有⼀个串⼝程序,是在VB6.0下开发的,运⾏时,出现了错误。
但是Win7 64位已经是VS2008 VS2010等的了,不能安装原来的VC++6.0 VB6.0了。
那怎么使⽤之前的代码与运⾏之前的程序呢?Win7 兼容性还算是可以的。
这个串⼝程序使⽤的是:MSCOMM32.OCX,所以要在win7 上注册这个组件,因为不是DLL⽂件,可以直接使⽤。
成功的⽅法如下:把下载的mscomm32.ocx 复制到:C:\Windows\SysWOW64⽬录下(注意这⾥是win7 64位的)。
注册⽅法⼀:以管理员⾝份运⾏cmd,输⼊命令: regsvr32 mscomm32.ocx注册⽅法⼆:⽤记事本在 C:\Windows\SysWOW64新建⼀个txt⽂件,然后输⼊:C:\Windows\SysWOW64,保存成1.bat(改⽂件的扩展名)。