12216|9

77

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

用STM32F103的UART3智能卡模式时工作不正常 [复制链接]

用STM32的UART3的智能卡模式接智能卡,但工作不正常,具体表现为每次读智能卡前都要重新设置一次智能卡模式,否则与智能卡通讯不上,是否STM32本来就是这样每次都要重新设置一次然后才读取智能卡呢?还是程序设置问题?另外,在本应用中智能卡模式时校验位不管是设为奇校验或偶校验都可以读智能卡,就像校验位没有作用一样.会是什么原因呢?如下是配置程序:

谢谢回复.

void Easrm_Rest(void) // 复位
{
  //uint ForI=0;
  //++GTime;
  //Savep=GTime<<8;
  //USART3_GTPR =USART3_GTPR&0x00FF;
  //USART3_GTPR=USART3_GTPR|Savep;

  UARST_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 Number,uint Bps_Val,uchar StopBit,uchar Evar)
{

  /*---------------------------------------------------------------*/
//SET PB12 cLK
GPIOB_CRH|=(1<<Bit16)|(1<<Bit17)|(1<<Bit18)|(1<<Bit19);
GPIOB_CRH &=(~(1<<Bit18));
/*---------------------------------------------------------------*/

//set PB10 PB11

  GPIOB_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;
/*---------------------------------------------------------------*/
}
此帖出自stm32/stm8论坛

最新回复

                                 如果或以芯片有问题就看勘误表,勘误表上没有列的,一般的人应该碰不到,碰到了,就说明你中彩票了  详情 回复 发表于 2010-12-2 13:54
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
应该是代码的问题

ST有智能卡接口的DEMO程序的:
http://www.st.com/stonline/produ ... ro/files/an2598.zip

还有用户手册:
http://www.st.com/stonline/products/literature/an/13750.pdf
此帖出自stm32/stm8论坛
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 谢谢VIGIA提醒,偶再查下。。。。
此帖出自stm32/stm8论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 谢谢VIGIA提醒,偶再查下。。。。
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 不知楼主的问题解决了没有?我也正在用它,从示波器上看到了ATR,但总是不进接收中断,改为查询方式,标志位也没有置位。发送数据全变成了7位数据加一位校验,IC卡返回校验错(USART3)。同时我发现用USART1的普通串口功能加上校验位以后也不正常。
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
不知楼主的问题解决了没有?我也正在用它,从示波器上看到了ATR,但总是不进接收中断,改为查询方式,标志位也没有置位。发送数据全变成了7位数据加一位校验,IC卡返回校验错(USART3)。同时我发现用USART1的普通串 ...
不要一有问题就怀疑芯片BUG

请问,你参考了ST提供的文档和DEMO程序了吗?
此帖出自stm32/stm8论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 总之我用过USART的智能卡模式了,一切正常,一定是你们的程序有问题。还有楼主自己操作的寄存器为什么不用库函数呢,不要为了省几句代码,这样问题都不好找
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

8
 
void USARTConfigration(void)
{
    USART_InitTypeDef USART_InitStructure;
  /* 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_Even;
  //USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_InitStructure.USART_Clock = USART_Clock_Enable;
  USART_InitStructure.USART_LastBit = USART_LastBit_Enable;
  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初始化
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 学习下,
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 如果或以芯片有问题就看勘误表,勘误表上没有列的,一般的人应该碰不到,碰到了,就说明你中彩票了
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表