stm32f103zet6调试成功的智能卡,为什么在stm32f103c8t6例程上不能使用

后使用快捷导航没有帐号?
查看: 4812|回复: 7
关于使用STM32F103xx用作USBHID设备时的问题
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
我使用stm32F103RBT6,用来作一个读卡器。发现报告描述符的配置会影响产品的适应性。我开始时把报告描述符中的输入输出报告长度定义为64字节,基本上在所有电脑上都能正确识别,并能正确操作。但为了提高传传输速度,我把输入和输出的报告长度定义为280字节后,发现计算机都能识别,但有几台新的电脑虽然能识别,但不能正常读写。不知道是何原因。请高手解答,谢谢!!!源码如下:
/* Includes ------------------------------------------------------------------*/
#include &usb_lib.h&
#include &usb_desc.h&
#include &usb_config.h&
#include &hw_config.h&
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Extern variables ----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/* USB Standard Device Descriptor */
const u8 DeviceDescriptor[SIZ_DEVICE_DESC] =
& & 0x12,& && && && && && && &&&/*bLength */
& & USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
& & 0x10,& && && && && && && &&&/*bcdUSB USB1.1 */
& & 0x00,& && && && && && && &&&/*bDeviceClass*/
& & 0x00,& && && && && && && &&&/*bDeviceSubClass*/
& & 0x00,& && && && && && && &&&/*bDeviceProtocol*/
& & 0x40,& && && && && && && &&&/*bMaxPacketSize40*/
& & ID_VENDOR_L,& && && && && & /*idVendor (0x0483)这个是需要跟USB组织申请的ID号,表示厂商代号*/
& & ID_VENDOR_H,
& & ID_PRODUCT_L,& && && && && &/*idProduct = 0x1010该产品的编号,跟厂商编号一起配合使用,让主机注册该设备并加载相应的驱动程序*/
& & ID_PRODUCT_H,
& & 0x00,& && && && && && && &&&/*bcdDevice rel. 1.00*/
& & 1,& && && && && && && && &&&/*Index of string descriptor describing
& && && && && && && && && && && && && && && & manufacturer */
& & 2,& && && && && && && && &&&/*Index of string descriptor describing
& && && && && && && && && && && && && && && &product*/
& & 3,& && && && && && && && &&&/*Index of string descriptor describing the
& && && && && && && && && && && && && && && &device serial number */
& & 0x01& && && && && && && && &/*bNumConfigurations*/
&&; /* DeviceDescriptor */
/* USB Configuration Descriptor */
/*& &All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
const u8 ConfigDescriptor[SIZ_CONFIG_DESC] =
& & 0x09, /* bLength: Configuation Descriptor size */
& & USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
& & SIZ_CONFIG_DESC,
& & /* wTotalLength: Bytes returned */
& & 0x01,& && && &/*bNumInterfaces: 1 interface*/
& & 0x01,& && && &/*bConfigurationValue: Configuration value*/
& & 0x00,& && && &/*iConfiguration: Index of string descriptor describing
& && && && && && && && && && && &the configuration*/
& & 0xA0,& && && &/*bmAttributes: 总线供电,支持远程唤醒 */
& & 0xC8,& && && &/*MaxPower 400 mA: this current is used for detecting Vbus*/
& & /************** Descriptor of interface ****************/
& & /* 09 */
& & 0x09,& && && &/*bLength: Interface Descriptor size*/
& & USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/
& & 0x00,& && && &/*bInterfaceNumber: Number of Interface*/
& & 0x00,& && && &/*bAlternateSetting: Alternate setting*/
& & 0x02,& && && &/*bNumEndpoints*/
& & 0x03,& && && &/*bInterfaceClass: HID*/
& & 0x00,& && && &/*bInterfaceSubClass : 1=BOOT, 0=no boot*/
& & 0x00,& && && &/*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/
& & 0,& && && && &/*iInterface: Index of string descriptor*/
& & /******************** Descriptor of HID ********************/
& & /* 18 */
& & 0x09,& && && &/*bLength: HID Descriptor size*/
& & HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
& & 0x00,& && && &/*bcdHID: HID Class Spec release number*/
& & 0x00,& && && &/*bCountryCode: Hardware target country*/
& & 0x01,& && && &/*bNumDescriptors: Number of HID class descriptors to follow*/
& & 0x22,& && && &/*bDescriptorType*/
& & SIZ_REPORT_DESC,/*wItemLength: Total length of Report descriptor*/
& & /******************** Descriptor of&&endpoint ********************/
& & /* 27 */
& & 0x07,& && && & /*bLength: Endpoint Descriptor size*/
& & USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
& & 0x81,& && && & /*bEndpointAddress: Endpoint Address (IN)*/
& & 0x03,& && && & /*bmAttributes: Interrupt endpoint*/
& & SEND_BUFFER_SIZE_L,& && && & /*wMaxPacketSize: 280 Byte max */
& & SEND_BUFFER_SIZE_H,
& & 0x0A,& && && & /*bInterval: Polling Interval (10 ms)*/
& & /* 34 */
& & /******************** Descriptor of&&endpoint ********************/
& & /* 27 */
& & 0x07,& && && & /*bLength: Endpoint Descriptor size*/
& & USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
& & 0x01,& && && & /*bEndpointAddress: Endpoint Address (OUT)*/
& & 0x03,& && && & /*bmAttributes: Interrupt endpoint*/
& & REC_BUFFER_SIZE_L,& & /*wMaxPacketSize: 280 Byte max */
& & REC_BUFFER_SIZE_H,
& & 0x0A,& && && & /*bInterval: Polling Interval (10 ms)*/
& & /* 34 */
&&; /* ConfigDescriptor */
const u8 ReportDescriptor[SIZ_REPORT_DESC] =
& & 0x05, 0xFF,& && && && && && &&&// USAGE_PAGE(User define) Device Use=USAGE_PAGE*255+USAGE=0xff*255+USAGE
& & 0x09, 0x30,& && && && && && &&&// USAGE(User define)
& & 0xa1, 0x01,& && && && && && &&&// COLLECTION (Application)
& & 0x05, 0x01,& && && && && && &&&// USAGE_PAGE(1)
& & 0x19, 0x00,& && && && && && &&&//& &USAGE_MINIMUM(0)
& & 0x29, 0xFF,& && && && && && &&&//& &USAGE_MAXIMUM(255)
& & 0x15, 0x00,& && && && && && &&&//& &LOGICAL_MINIMUM (0)
& & 0x25, 0xFF,& && && && && && &&&//& &LOGICAL_MAXIMUM (255)
& & 0x75, 0x10,& && && && && && &&&//& &REPORT_SIZE (16) (280 bytes=16*140 bits)
& & 0x95, SEND_BUFFER_SIZE_REP,& && &&&//& &REPORT_COUNT (140)
& & 0x81, 0x02,& && && && && && &&&//& &INPUT (Data,Var,Abs)
& & 0x05, 0x02,& && && && && && &&&// USAGE_PAGE(2)
& & 0x19, 0x00,& && && && && && &&&//& &USAGE_MINIMUM (0)
& & 0x29, 0xFF,& && && && && && &&&//& &USAGE_MAXIMUM (255)
& & 0x15, 0x00,& && && && && && &&&//& &LOGICAL_MINIMUM (0)
& & 0x25, 0xFF,& && && && && && &&&//& &LOGICAL_MAXIMUM (255)
& & 0x95, 0x10,& && && && && && &&&//& &REPORT_COUNT (16)& &(280 bytes=16*140 bits)
& & 0x75, REC_BUFFER_SIZE_REP,& && && &//& &REPORT_SIZE (140)
& & 0x91, 0x02,& && && && && && &&&//& &OUTPUT (Data,Var,Abs)
& & 0xc0& && && && && && && && && &// END_COLLECTION
&&}; /* ReportDescriptor */
/* USB String Descriptors (optional) */
const u8 StringLangID[SIZ_STRING_LANGID] =
& & SIZ_STRING_LANGID,
& & USB_STRING_DESCRIPTOR_TYPE,
&&&&&&&&&&
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
& & & & & & & & & & & & & & & &&&没有高手分析一下吗?帮顶一下
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
& & & & & & & & & & & & & & & &&&把报告的长度增加,并不能提高速度。因为对于全速设备的中断端点,最快的传输速率只能达到1数据包/ms。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
USB 2.0协议里面说:
The maximum allowable interrupt data payload size is 64bytes or less for full-speed. High-speed endpoints are allowed maximum data payload sizes up to 1024 bytes.
280字节超过允许范围了。
要提高速度,改改这个吧:0x0A,& && && & /*bInterval: Polling Interval (10 ms)*/
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
Polling Interval :指示主机隔多少时间向设备请求数据
10ms就是每10ms主机会向设备发一个IN/OUT的TOKEN,就可以进行通信了。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
主要是通过usb hid传输协议的话,有些协议头和尾也占字节。所以扩大包处理起来比较方便。
有的计算机能用,有的计算机不能用。这好像只能说明计算机侧有问题。而不说明stm32 有问题。我们用实达的工控机,开始不能用。后来他们升级完工控机的bios后就能识别了。新的电脑按说应该是高速设备呀,为什么不能正常操作呢?只能说是全速设备了看来。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
我使用stm32F103RBT6,用来作一个读卡器。发现报告描述符的配置会影响产品的适应性。我开始时把报告描述符中的输入输出报告长度定义为64字节,基本上在所有电脑上都能正确识别,并能正确操作。但为了提高传传输速度, ...
楼主的方向好像错了,不知道你做的是什么读卡器?SD卡读卡器还是智能卡读卡器?如果是SD卡读卡器,应该使用USB Mass Storage协议,如果是智能卡读卡器,应该使用USB CCID协议。
USB HID的应用对象是那些速度很慢的人机交互接口,如键盘、鼠标等设备,它本身就不适合做高速的、大容量的数据传输。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
& & & & & & & & & & & & & & & &&&也许是像读RFID卡(例如二代身份证)那样的读卡器吧……是用HID协议的。
Powered by
逛了这许久,何不进去瞧瞧?用STM32F103的UART3智能卡模式时工作不正常==
热门型号:
&&&当前位置:
用STM32F103的UART3智能卡模式时工作不正常
用户名:行不改名
注册时间: 22:19:00
用STM32F103的UART3智能卡模式时工作不正常
用STM32的UART3的智能卡模式接智能卡,但工作不正常,具体表现为每次读智能卡前都要重新设置一次智能卡模式,否则与智能卡通讯不上,是否STM32本来就是这样每次都要重新设置一次然后才读取智能卡呢还是程序设置问题另外,在本应用中智能卡模式时校验位不管是设为奇校验或偶校验都可以读智能卡,就像校验位没有作用一样.会是什么原因呢如下是配置程序:谢谢回复.void Easrm_Rest(void) // 复位{//uint ForI=0;//++GT//Savep=GTime<<8;//USART3_GTPR =USART3_GTPR&0x00FF;//USART3_GTPR=USART3_GTPR|SUARST_Val.EsarmVal.Rx_Leth=0;//清接电数据USART3_CR3 &=(~(1<<Bit5));//关智能卡模式,没有此句收不了数ESARM_RST_L();//智能卡模式复位低LCD_CloseLed();//智能卡下电OSTimeDly(20);USART3_CR3 |=(1<<Bit5);//开智能卡模式,没有此句收不了数LCD_OpenlLed();//智能卡上电OSTimeDly(10);ESARM_RST_H();//智能卡模式复位高nop();OSTimeDly(50);////智能卡模式复位收数据// 以下是收到的数据发到别一串口Pub_MoveData(UARST_Val.EsarmVal.Rx_Leth,0,0,UARST_Val.EsarmVal.Rx_Save, UARST_Val.Gprs.Tx_Save);UARST_GrsTx(UARST_Val.EsarmVal.Rx_Leth);//UARST_Val.EsarmVal.Rx_Leth=0;//ESARM_RST_L();//OSTimeDly(10);// ESARM_RST_H();}/*-------------------------------------------------------*/static void UASRT3_init(uchar ,uint Bps_Val,uchar StopBit,uchar Evar){/*---------------------------------------------------------------*///SET PB12 cLKGPIOB_CRH|=(1<<Bit16)|(1<<Bit17)|(1<<Bit18)|(1<<Bit19);GPIOB_CRH &=(~(1<<Bit18));/*---------------------------------------------------------------*///set PB10 PB11GPIOB_CRH &=(~(1<<Bit12))&(~(1<<Bit13))&(~(1<<Bit15));GPIOB_CRH |=(1<<Bit11)|(1<<Bit14)|(1<<Bit8)|(1<<Bit9)|(1<<Bit10);/*---------------------------------------------------------------*/USART3_CR1=0; //复位串口USART3_CR2=0;USART3_CR3=0;/*---------------------------------------------------------------*/USART3_BRR = UARSR_Bps(Number,Bps_Val); //设波特率值/*---------------------------------------------------------------*/USART3_CR1 |=(1<<Bit12);//USART1_CR1 &=~(1<<Bit12); // 8 个数据N 个停止位if(StopBit==UARST_StopBit_One) // 1 个停止位或2 个停止位 { USART3_CR2 &=(~(1<<Bit12))&(~(1<<Bit13)); }else if(StopBit==UARST_StopBit_Two) { USART3_CR2 |=(1<<Bit13); USART3_CR2 &=~(1<<Bit12); }else if(StopBit==UARST_StopBit_FOne) { USART3_CR2 |=(1<<Bit13)|(1<<Bit12); }/*---------------------------------------------------------------*/USART3_CR2 |=(1<<Bit11); // CLKEN 使能/*---------------------------------------------------------------*/if(Evar==UARST_None_Parity) //无检验 { USART3_CR1 &=~(1<<Bit10); USART3_CR1 &=~(1<<Bit12);
}else if(Evar==UARST_Even_Parity)//偶校验{
USART3_CR1 |=(1<<Bit10);
USART3_CR1 &=~(1<<Bit9);}else if(Evar==UARST_Odd_Parity)//奇校验{
USART3_CR1 |=(1<<Bit10)|(1<<Bit9);}/*---------------------------------------------------------------*///USART3_CR1 |=(1<<Bit7);//发送缓冲区空中断使能//USART3_CR1 |=(1<<Bit6);USART3_CR1 |=(1<<Bit5);//接收缓冲区空中断使能/*---------------------------------------------------------------*/USART3_CR1 |=(1<<Bit2); //接收使能USART3_CR1 |=(1<<Bit3);//发送使能/*---------------------------------------------------------------*/USART3_CR1 |=(1<<Bit8);//串口中断便能/*---------------------------------------------------------------*/ USART3_CR2 |=(1<<Bit11); // CLKEN 使能USART3_CR3 |=(1<<Bit5);/*---------------------------------------------------------------*/ USART3_GTPR |=(1<<Bit0)|(1<<Bit1);//24M/6=4M USART3_CR2 |=(1<<Bit8); /*---------------------------------------------------------------*/ USART3_CR1 |=(1<<Bit13); //串口使能IRQ_SETENA1 |=1<<Bit7; /*---------------------------------------------------------------*/ }
用户名:行不改名
注册时间: 18:25:00
谢谢VIGIA提醒,偶再查下。。。。
用户名:行不改名
注册时间: 18:25:00
谢谢VIGIA提醒,偶再查下。。。。
用户名:tsyejay
注册时间: 0:29:00
不知楼主的问题解决了没有?我也正在用它,从示波器上看到了ATR,但总是不进接收中断,改为查询方式,标志位也没有置位。发送数据全变成了7位数据加一位校验,IC卡返回校验错(USART3)。同时我发现用USART1的普通串口功能加上校验位以后也不正常。
用户名:vigia
注册时间: 10:35:00
不知楼主的问题解决了没有?我也正在用它,从示波器上看到了ATR,但总是不进接收中断,改为查询方式,标志位也没有置位。发送数据全变成了7位数据加一位校验,IC卡返回校验错(USART3)。同时我发现用USART1的普通串 ...
tsyejay 发表于
用户名:zhaoyun1234
注册时间: 15:37:00
总之我用过USART的智能卡模式了,一切正常,一定是你们的程序有问题。还有楼主自己操作的寄存器为什么不用库函数呢,不要为了省几句代码,这样问题都不好找
用户名:zhaoyun1234
注册时间: 15:43:00
void USARTConfigration(void)
& & USART_InitTypeDef USART_InitS
&&/* USART1 configured as follow:
& && &&&- Word Length = 9 Bits
& && &&&- 1.5 Stop Bit
& && &&&- Even parity
& && &&&- BaudRate = 10753 baud
& && &&&- Hardware flow control disabled (RTS and CTS signals)
& && &&&- Tx and Rx enabled
& && &&&- USART Clock enabled
&&/* USART Clock set to 4MHz (PCLK2 = 72 MHZ / 18) */
&&USART_SetPrescaler(USART1, 0x09);
&&/* USART Guard Time set to 2 Bit */
&&USART_SetGuardTime(USART1, 0x02);
&&USART_StructInit(&USART_InitStructure);
&&USART_InitStructure.USART_BaudRate = 10753;//9600;//12096;
&&USART_InitStructure.USART_WordLength = USART_WordLength_9b;
&&USART_InitStructure.USART_StopBits = USART_StopBits_1_5;
&&USART_InitStructure.USART_Parity = USART_Parity_E
&&//USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
&&USART_InitStructure.USART_Clock = USART_Clock_E
&&USART_InitStructure.USART_LastBit = USART_LastBit_E
&&USART_Init(USART1, &USART_InitStructure);
&&/* Enable the USART3 Parity Error Interrupt */
&&USART_ITConfig(USART1, USART_IT_PE, ENABLE);
&&/* Enable USART1 */
&&USART_Cmd(USART1, ENABLE);
&&/* Enable the NACK Transmission */
&&USART_SmartCardNACKCmd(USART1, ENABLE);
&&/* Enable the Smart Card Interface */
&&USART_SmartCardCmd(USART1, ENABLE);
这是我的UASART初始化
用户名:ningzb
注册时间: 13:54:00
如果或以芯片有问题就看勘误表,勘误表上没有列的,一般的人应该碰不到,碰到了,就说明你中彩票了
用户名:xxx
注册时间: 14:56:00
如果是用了ST8024,很大可能是初始化中的时序有问题
热门型号:后使用快捷导航没有帐号?
查看: 3709|回复: 7
STM32F103C876(48脚)在智能卡中的应用,遇到问题
在线时间19 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 30, 距离下一级还需 170 积分
一粒金砂(中级), 积分 30, 距离下一级还需 170 积分
我将USART2的模式配置成智能卡模式来与智能卡通信,用示波器检测到USART2_CK脚(PA4)无任何输出,请问在智能卡模式中,它是不是应该输出智能卡的时钟信号呀?怎么配置才正确呢?以下为配置代码,请用过的大侠帮忙:/********************************************************************************&Function&Name&&:&SC_Init*&Description&&&&:&Initializes&all&peripheral&used&for&Smartcard&interface.*&Input&&&&&&&&&&:&None*&Output&&&&&&&&&:&None*&Return&&&&&&&&&:&None*******************************************************************************/static&void&SC_Init(void){&&GPIO_InitTypeDef&GPIO_InitS&&USART_InitTypeDef&USART_InitS&&&&&/*&Enable&GPIOA,&GPIOB&and&AFIO&clocks&*/&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA&|&RCC_APB2Periph_GPIOB&|&RCC_APB2Periph_AFIO,&ENABLE);&&/*&Enable&USART2&clock&*/&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,&ENABLE);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/*&Configure&USART2&CK(PA.4)&as&alternate&function&push-pull&*/&&GPIO_InitStructure.GPIO_Pin&=&SC_CLK;&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_AF_PP;&&GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_50MHz;&&GPIO_Init(GPIOA,&&GPIO_InitStructure);&&&&/*&Configure&USART2&Tx&(PA.2)&as&alternate&function&open-drain&*/&&GPIO_InitStructure.GPIO_Pin&=&SC_IO;&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_AF_OD;&&GPIO_Init(GPIOA,&&GPIO_InitStructure);&&/*&Configure&Smartcard&Reset&&*/&&GPIO_InitStructure.GPIO_Pin&=&SC_RESET;&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_Out_PP;&&GPIO_Init(GPIOB,&&GPIO_InitStructure);&&/*&Configure&Smartcard&VCC&&*/&&GPIO_InitStructure.GPIO_Pin&=&SC_VCC;&&GPIO_Init(GPIOA,&&GPIO_InitStructure);&&&&/*&USART2&configuration&------------------------------------------------------*/&&/*&USART&Clock&set&to&3.6&MHz&(PCLK1&(36&MHZ)&/&10)&*/&&USART_SetPrescaler(USART2,&0x05);&&&&/*&USART&Guard&Time&set&to&16&Bit&*/&&//在智能卡中需要该功能,当保护时间过去后,发送完成标志才被置起。&&USART_SetGuardTime(USART2,&16);&&&&USART_StructInit(&USART_InitStructure);&&USART_InitStructure.USART_BaudRate&=&9677;&&USART_InitStructure.USART_WordLength&=&USART_WordLength_9b;&&USART_InitStructure.USART_StopBits&=&USART_StopBits_1_5;&&USART_InitStructure.USART_Parity&=&USART_Parity_E&&USART_InitStructure.USART_Clock&=&USART_Clock_E&&&&USART_Init(USART2,&&USART_InitStructure);&&/*&Enable&the&USART2&Parity&Error&Interrupt&*/&&USART_ITConfig(USART2,&USART_IT_PE,&ENABLE);&&/*&Enable&the&USART2&Framing&Error&Interrupt&*/&&USART_ITConfig(USART2,&USART_IT_ERR,&ENABLE);&&/*&Enable&USART2&*/&&USART_Cmd(USART2,&ENABLE);&&/*&Enable&the&NACK&Transmission&*/&&USART_SmartCardNACKCmd(USART2,&ENABLE);&&/*&Enable&the&Smartcard&Interface&*/&&USART_SmartCardCmd(USART2,&ENABLE);&&SC_Reset(Bit_RESET);&&&&&&//复位脚置低电平&&SC_PowerCmd(ENABLE);}
&&&&&&&&&&
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
我可能找到原因了,现在想请香版主确定一下
因我用到oled显示屏,用到了SPI1接口,而SPI1接口的NSS脚与智能卡的CLK脚是复用同一脚的,我测试每当用SPI1功能时,智能卡接口就不能用了。而且测试当使用SPI1时,NSS可以当普通IO口使用,指定其输出电平高低。但是将NSS再用作智能卡却不行了请问版主,我的分析是不是实际情况如果是实际情况的话,那么SPI1和智能卡功能就不能同时使用了
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
我现在不能确定,但不管怎样你应该把SSOE清零
& & & & & & & & & & & & & & & &&&上班后才能问问我们的工程师是否有人用过这种组合。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
谢谢香帅,等待您的消息
1.我试过了。手册上是让SSOE清零,但实验中SSOE清零不清零都一样效果,只要SPI1的时钟开着RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,&ENABLE)就不成功。2.现在我是用模拟的SPI功能实现SPI的,这样SPI功能和智能卡能算是同时使用了吧。3.我希望两种复用功能都能使用,因为我的SPI2也是两种同时使用的,等待您的消息。。。4.每次提问版主都能给予及时回答,谢谢!!
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
请把你的SPI1的初始化代码贴一下。
& & & & & & & & & & & & & & & &&&包括SPI1的IO的配置。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
这是初始化代码,有问题吗?
void&SPI_OLED_Init(void){&&SPI_InitTypeDef&&SPI_InitS&&GPIO_InitTypeDef&GPIO_InitS&&&&&/*&Enable&SPI1&and&GPIOA&clocks&*/&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1&|&RCC_APB2Periph_GPIOA,&ENABLE);&&&&/*&Configure&SPI1&pins:&SCK&and&MOSI&*/&&GPIO_InitStructure.GPIO_Pin&=&GPIOA_OLED_SCK&|&GPIOA_OLED_MOSI;&&GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_10MHz;&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_AF_PP;&&GPIO_Init(GPIOA,&&GPIO_InitStructure);&&/*&Configure&PB.0&and&PB.1&as&Output&push-pull,&used&as&OLED&Chip&select&*/&&GPIO_InitStructure.GPIO_Pin&=&GPIOB_OLED_CS&|&GPIOB_OLED_A0&;&&GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_2MHz;&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_Out_PP;&&GPIO_Init(GPIOB,&&GPIO_InitStructure);&&/*&Configure&PA.6&as&Output&push-pull,&used&as&OLED&Reset&*/&&GPIO_InitStructure.GPIO_Pin&=&GPIOA_OLED_RES&;&&GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_2MHz;&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_Out_PP;&&GPIO_Init(GPIOA,&&GPIO_InitStructure);&&/*&Deselect&the&OLED&*/&&OLED_CS(DISABLE);&&/*&SPI1&configuration&*/&&&SPI_InitStructure.SPI_Direction&=&SPI_Direction_1Line_Tx;&&&&&&&//OLED仅需要发送&&SPI_InitStructure.SPI_Mode&=&SPI_Mode_M&&SPI_InitStructure.SPI_DataSize&=&SPI_DataSize_8b;&&SPI_InitStructure.SPI_CPOL&=&SPI_CPOL_H&&SPI_InitStructure.SPI_CPHA&=&SPI_CPHA_2E&&SPI_InitStructure.SPI_NSS&=&SPI_NSS_S&&SPI_InitStructure.SPI_BaudRatePrescaler&=&SPI_BaudRatePrescaler_4;&&SPI_InitStructure.SPI_FirstBit&=&SPI_FirstBit_MSB;&&SPI_InitStructure.SPI_CRCPolynomial&=&7;&&SPI_Init(SPI1,&&SPI_InitStructure);&&&&SPI_SSOutputCmd(SPI1,DISABLE);&//关输出&&&&/*&Enable&SPI1&&*/&&SPI_Cmd(SPI1,&ENABLE);&&&}
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
ST_ARM,我代码贴出很久了,有空分析一下呀,谢谢
& & & & & & & & & & & & & & & && &
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
请将NSS输出打开
在SPI的初始化的最后SPI_SSOutputCmd(SPI1,ENABLE);&//&输出NSS信号这样就可以。
Powered by
逛了这许久,何不进去瞧瞧?

我要回帖

更多关于 stm32f103c8t6 usb 的文章

 

随机推荐