STM32f103板子341驱动安装失败到预安装成功到安装成功

电脑为win10x64,板子为STM32f103

之前上实验课的时候有做过STM板子实验,但都是成功的,这里这个CH340驱动卡了我很久,在论坛、百度、CSDN都逛遍了,也几乎所有方法都试过了,仍然是安装失败

比如:禁用数字签名、修改系统文件mdmcpq.inf、使用其他驱动程序、使用USB转TTL、显示隐藏端口等等

最后在同学的帮助下用everything将CH340和CH341还有个另外的(忘记叫啥了)驱动全部卸载干净,去官网重新下CH341

CH341SER.EXE - 南京沁恒微电子股份有限公司

然后再重新试过安装,安装驱动时显示预安装成功,但连接了板子还是预安装

之后也搜了好多方法,但都没法安装成功,甚至换了两条线,最后同学找到了一篇关于WIN10装CH340驱动的一些小小的注意事项_Dingfangwang的博客-CSDN博客_win10ch340驱动预安装成功

幸好手上还有一个单片机,最后安装成功了

感谢大佬帮忙以及上面网页博主

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CH341的串口方式支持WINDOWS 98/ME/2000/XP/Vista/Linux,提供相关驱动程序, CH341的USB转串口支持大多数常用的串口监控及调试工具程序。 驱动安装方法: 1. 标准INF文件安装方法 WINDOWS提示找到新硬件,指定驱动程序所在目录DRIVER,自动安装驱动, 如果WINDOWS没有提示找到新硬件,那么在设备管理器的硬件列表中, 选择带问号的USB设备,更新驱动程序并指定目录。 2. 使用驱动程序安装工具 先拔掉USB串口连接线,然后安装,然后插上连接线 直接使用CH341SER.EXE安装包,可以安装/升级/卸载驱动程序, 该方法更适用于最终用户。 CH341串口使用方法: CH341实现USB转串口,在逻辑功能方面的使用方法与普通计算机串口相同。 与普通计算机串口的区别: CH341提供的是仿真串口,所以不支持串口本身的纯硬件操作,例如I/O操作, 普通计算机串口是静态设备,而CH341串口是动态设备,理论上随时会断开, CH341的附加功能(下面有介绍):读取外部串行EEPROM,支持更高波特率。 提供“模块调试”工具,启动后将“类型”选择为“手工输入发送”, 打开串口后就可以用于CH341串口或者普通串口的输入输出监控及收发调试。 注意事项: CH341串口是即插即用的USB设备,正在使用CH341串口进行数据传输的过程中, 不可以将其断开(断开是指从USB插座中取出CH341或者关闭CH341的电源), 也就是说,必须在应用程序关闭该串口后,CH341串口才可以从USB插座中拔出。 如果在应用程序使用CH341串口的过程中,CH341串口设备从USB插座中断开, 那么应用程序应该尽快关闭CH341串口并退出(关闭及退出可能需要数秒时间)。 如果在CH341串口通讯过程中发生错误,极有可能是CH341串口已经物理断开, 所以在检测到错误后建议关闭CH341串口,稍等两秒后再重新打开串口通讯。 采用设备事件通知的方法可以及时了解CH341串口设备的连接与断开, 从而使串口应用程序能够及时打开和关闭CH341串口。 串口动态链接库CH341PT.DLL提供了API,可以监视CH341串口插拔事件, 可以搜索和识别CH341串口等,具体需参考CH341PT.H文件。 如果通讯波特率较高,建议设置较大的缓冲区,尤其在WINDOWS 98/ME下, 线程调度能力和USB实时性都比WINDOWS 2000/XP差,如果串口接收缓冲区较小, 那么在通讯波特率较高时,接收大量数据会导致串口缓冲区溢出而丢弃数据。 由于底层的USB是将多个字节组成数据包后安插到各个1mS帧中进行传输, 所以有可能将串口收发的紧靠着的两个字节实际分割在两个USB数据包甚至 两个USB帧中,在最坏情况下这两个字节在时间上有可能相隔1mS甚至2mS。
以下是正点原子stm32F103RCT6mini板子驱动NT35310液晶屏的代码: ``` #include "NT35310.h" #include "lcd.h" //初始化NT35310液晶屏 void NT35310_Init(void) { LCD_WR_REG(0x00,0x0001); delay_ms(50); LCD_WR_REG(0xE5,0x8000); LCD_WR_REG(0x00,0x0000); LCD_WR_REG(0x01,0x0100); LCD_WR_REG(0x02,0x0700); LCD_WR_REG(0x03,0x1030); LCD_WR_REG(0x04,0x0000); LCD_WR_REG(0x08,0x0202); LCD_WR_REG(0x09,0x0000); LCD_WR_REG(0x0A,0x0000); LCD_WR_REG(0x0C,0x0000); LCD_WR_REG(0x0D,0x0000); LCD_WR_REG(0x0F,0x0000); LCD_WR_REG(0x50,0x0000); LCD_WR_REG(0x51,0xEF00); LCD_WR_REG(0x52,0x0000); LCD_WR_REG(0x53,0x013F); LCD_WR_REG(0x60,0xA700); LCD_WR_REG(0x61,0x0001); LCD_WR_REG(0x6A,0x0000); LCD_WR_REG(0x80,0x0000); LCD_WR_REG(0x81,0x0000); LCD_WR_REG(0x82,0x0000); LCD_WR_REG(0x83,0x0000); LCD_WR_REG(0x84,0x0000); LCD_WR_REG(0x85,0x0000); LCD_WR_REG(0x90,0x0010); LCD_WR_REG(0x92,0x0600); LCD_WR_REG(0x93,0x0003); LCD_WR_REG(0x95,0x0101); LCD_WR_REG(0x97,0x0000); LCD_WR_REG(0x98,0x0000); LCD_WR_REG(0x07,0x0133); } //设置NT35310液晶屏的显示区域 void NT35310_SetWindow(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey) { LCD_WR_REG(0x50,sx); LCD_WR_REG(0x51,ex); LCD_WR_REG(0x52,sy); LCD_WR_REG(0x53,ey); LCD_WR_REG(0x20,sx); LCD_WR_REG(0x21,sy); } //在NT35310液晶屏上指定位置画点 void NT35310_DrawPoint(uint16_t x,uint16_t y,uint16_t color) { NT35310_SetWindow(x,y,x,y); LCD_WR_REG(0x22,color); } //在NT35310液晶屏上指定位置画水平线 void NT35310_DrawHLine(uint16_t x,uint16_t y,uint16_t length,uint16_t color) { uint16_t i; NT35310_SetWindow(x,y,x+length-1,y); for(i=0;i<length;i++) { LCD_WR_REG(0x22,color); } } //在NT35310液晶屏上指定位置画垂直线 void NT35310_DrawVLine(uint16_t x,uint16_t y,uint16_t length,uint16_t color) { uint16_t i; NT35310_SetWindow(x,y,x,y+length-1); for(i=0;i<length;i++) { LCD_WR_REG(0x22,color); } } //在NT35310液晶屏上指定位置画矩形 void NT35310_DrawRectangle(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color) { uint16_t i; NT35310_SetWindow(sx,sy,ex,ey); for(i=sx;i<=ex;i++) { LCD_WR_REG(0x22,color); } } //在NT35310液晶屏上指定位置填充矩形 void NT35310_FillRectangle(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color) { uint16_t i,j; NT35310_SetWindow(sx,sy,ex,ey); for(i=sy;i<=ey;i++) { for(j=sx;j<=ex;j++) { LCD_WR_REG(0x22,color); } } } //在NT35310液晶屏上指定位置显示一张图片 void NT35310_ShowPicture(uint16_t x,uint16_t y,uint16_t width,uint16_t height,uint8_t *p) { uint16_t i,j; NT35310_SetWindow(x,y,x+width-1,y+height-1); for(i=0;i<height;i++) { for(j=0;j<width;j++) { LCD_WR_REG(0x22,*p++); LCD_WR_REG(0x22,*p++); } } } ``` 需要注意的是,以上代码中的 `LCD_WR_REG()` 函数是用于向NT35310液晶屏写入指令或数据的函数,具体实现在 `lcd.h` 文件中。此外,还需要根据自己的具体情况修改引脚定义和延时函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值