OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5436|回复: 6

求助407的串口2设置成智能卡模式,只能实现发送接收不了??

[复制链接]

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2013-6-3
在线时间
24 小时
发表于 2016-5-31 19:02:10 | 显示全部楼层 |阅读模式
2金钱
最近做一个项目,需要用到STM32F407ZGT6的串口2的智能卡模式,我依据数据手册来进行设置,PA2设置为复用开漏输出,PA4用于发送固定的频率脉冲,用于智能卡的时钟输入,结果是可以数据发送,却不可以数据的接收,是不是我的设置错误了,有哪位大神做过,能不能帮忙看下哪里设置错误
void USART2_Init(u32 pclk1,u32 bound)
{   
    float temp;
    u16 mantissa;
    u16 fraction;          
    temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV@OVER8=0
    mantissa=temp;                                 //得到整数部分
    fraction=(temp-mantissa)*16; /得到小数部分@OVER8=0
    mantissa<<=4;
    mantissa+=fraction;        
    RCC->AHB1ENR|=1<<0;           //使能PORTA的时钟
    RCC->APB1ENR|=1<<17;          //使能串口2的时钟
    GPIO_Set(GPIOA,PIN2,GPIO_MODE_AF,GPIO_OTYPE_OD,GPIO_SPEED_50M,GPIO_PUPD_NONE);//PA2 复用开漏输出
    GPIO_Set(GPIOA,PIN4,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA4 复用推挽输出
    GPIO_AF_Set(GPIOA,2,7);        //PA2,AF7
    GPIO_AF_Set(GPIOA,4,7);//PA4,AF7     

   USART2->BRR=mantissa;         //波特率设置       
   USART2->GTPR|=3<<1;                 //SCLK的时钟频率是系统时钟的12分频
   USART2->GTPR|=1<<13;    //保护时间16个时间单位
   USART2->CR1&=~(1<<15);         //OVER8=0
   USART2->CR1|=1<<12;                 //M=1
   USART2->CR1|=1<<10;                 //PCE=1
   USART2->CR1|=1<<3;                   //发送使能
   USART2->CR1|=1<<2;                   //接收时能
   USART2->CR2&=~(1<<14);  //LINEN=0
   USART2->CR2|=7<<11;                  //stop 1.5  使能SCLK
   USART2->CR3|=1<<5;                  //使能智能卡模式
   USART2->CR3&=~(1<<3);   //HDSEL=0
   USART2->CR3&=~(1<<1);   //LREN=0       
   USART2->CR1|=1<<5;            //接收缓冲区非空中断使能                   
   MY_NVIC_Init(3,2,USART2_IRQn,2);
   USART2->CR1|=1<<13;           //使能串口2
}

还是说管脚设置为复用开漏输出要什么外接电路

最佳答案

查看完整内容[请看2#楼]

已经解决了,其实是我自己犯错误了,启动智能卡模式的话,要等到串口的配置参数配置完全才能使能智能卡模式,所以程序是没有问题,主要是这条指令要放到初始完所有配置后面,启动完智能卡后PA2(开漏输出)就能输入和输出了,PA4能发送频率脉冲,很方便,不需要使用外接电路,希望这个能帮到初次使用407做智能卡模式的人 void USART2_Init(u32 pclk1,u32 bound) { float temp; u16 mantissa; u16 fraction ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2013-6-3
在线时间
24 小时
 楼主| 发表于 2016-5-31 19:02:11 | 显示全部楼层

已经解决了,其实是我自己犯错误了,启动智能卡模式的话,要等到串口的配置参数配置完全才能使能智能卡模式,所以程序是没有问题,主要是这条指令要放到初始完所有配置后面,启动完智能卡后PA2(开漏输出)就能输入和输出了,PA4能发送频率脉冲,很方便,不需要使用外接电路,希望这个能帮到初次使用407做智能卡模式的人
void USART2_Init(u32 pclk1,u32 bound)
{   
    float temp;
    u16 mantissa;
    u16 fraction;           
    temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV@OVER8=0
    mantissa=temp;                                 //得到整数部分
    fraction=(temp-mantissa)*16; /得到小数部分@OVER8=0
    mantissa<<=4;
    mantissa+=fraction;         
    RCC->AHB1ENR|=1<<0;           //使能PORTA的时钟
    RCC->APB1ENR|=1<<17;          //使能串口2的时钟
    GPIO_Set(GPIOA,PIN2,GPIO_MODE_AF,GPIO_OTYPE_OD,GPIO_SPEED_50M,GPIO_PUPD_NONE);//PA2 复用开漏输出
    GPIO_Set(GPIOA,PIN4,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA4 复用推挽输出
    GPIO_AF_Set(GPIOA,2,7);        //PA2,AF7
    GPIO_AF_Set(GPIOA,4,7);//PA4,AF7     

   USART2->BRR=mantissa;         //波特率设置        
   USART2->GTPR|=3<<1;                 //SCLK的时钟频率是系统时钟的12分频
   USART2->GTPR|=1<<13;    //保护时间16个时间单位
   USART2->CR1&=~(1<<15);         //OVER8=0
   USART2->CR1|=1<<12;                 //M=1
   USART2->CR1|=1<<10;                 //PCE=1
   USART2->CR1|=1<<3;                   //发送使能
   USART2->CR1|=1<<2;                   //接收时能
   USART2->CR2&=~(1<<14);  //LINEN=0
   USART2->CR2|=7<<11;                  //stop 1.5  使能SCLK
//  USART2->CR3|=1<<5;                  //使能智能卡模式 不能放这里
   USART2->CR3&=~(1<<3);   //HDSEL=0
   USART2->CR3&=~(1<<1);   //LREN=0        
   USART2->CR1|=1<<5;            //接收缓冲区非空中断使能                    
   MY_NVIC_Init(3,2,USART2_IRQn,2);
   USART2->CR3|=1<<5;                  //使能智能卡模式,这个指令要放在这里才行,等到所有配置完成后
   USART2->CR1|=1<<13;           //使能串口2
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2016-6-1 21:02:00 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-7-15
在线时间
1 小时
发表于 2016-8-11 15:29:12 | 显示全部楼层
这位哥哥,我最近也在忙ICC的项目,但是我对此还没有足够的认识,你能把你的工程发给我参考下吗?还有你PA2是做智能卡的IO,PA4做为智能卡的CLK,还有其他的昵?
我QQ邮箱:1101190752@qq.com    哥哥拜托了,我是刚入职场的小白
回复

使用道具 举报

9

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2016-11-14
在线时间
32 小时
发表于 2016-12-21 15:17:41 | 显示全部楼层
帮顶一下,请问楼主F407跟卡的接法是怎么样的?有没有例程呢?
回复

使用道具 举报

9

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2016-11-14
在线时间
32 小时
发表于 2016-12-21 15:17:56 | 显示全部楼层
正在做这个,麻烦了!
回复

使用道具 举报

12

主题

31

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2011-5-30
在线时间
6 小时
发表于 2017-7-11 15:00:16 | 显示全部楼层
兄弟,我现在也是用407的串口2做PSAM验证,硬件是直接连PSAM卡,我参考官方的例子,收到的应答是错误的,能否指点下,谢谢!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-18 15:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表