这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 通过USART1探索STM32F4与STM32F1的区别

共15条 1/2 1 2 跳转至

通过USART1探索STM32F4与STM32F1的区别

高工
2013-05-13 20:05:40     打赏
STM32F4的USART1
STM32F4跟F1在很多方面还是有区别的。就比如今天要驱动的串口。

碰见俩问题:
第一个,在F1里边你可以使用这样的方式配置时钟复用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);//打开复用时
但是。。。在F4里边这个就不管用了。因为F4的变了,以前的那些变量不再爱你了。库里边根本就没有了这个变RCC_APB2Periph_AFIO

第二,GPIO的输入输出模式也变了。这样的用法:GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;。已经不行了。原因同上,GPIO_Mode_IN_FLOATING这种模式已经不存在了。


在F4的库里边只有这个模式:GPIO_Mode_AF。所有使用复用功能的引脚都应设置成这种模式。

这样比F1方便多了。你不用考虑这个引脚应该设置成浮空输入还是推挽输出....因为引脚设置错误基本可以消失。


总结原因:F4没有了时钟复用功能。配置完成之后,需要用GPIO_PinAFConfig()设置功能映射。

一下是我的程序,在F4Discover上跑的。刚开始希望使用默认的PA9PA10作为串口引脚,后来发现这两个脚在板子上已经被使用了。于是换成了PB6 PB7来做串口1.这个映射比F1也简单多了。

1、配置GPIO
void Gpio_Config()
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB  , ENABLE);  //不能忘记开时钟
    
    //PB6->TX  PB7->Rx
    /* Configure USART1 Tx (PA.09) as alternate function push-pull */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    
    /* Configure USART1 Rx (PA.10) as input floating */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    
    GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1);//注意这里
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_USART1);
}

2、串口功能设置:
void USART_Config()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
    
    USART_InitStructure.USART_BaudRate = 115200;//115200;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    
    USART_Init(USART1,&USART_InitStructure);
    
    USART_Cmd(USART1,ENABLE);
}

这只是一个测试,所以我只完成了USART发送功能。理解了上面的那个不同之处,添加接收功能也很简单。

总结:变了就变了,我们有了新欢。比F1的更方便更快捷。




关键词: STM32     STM32F4     USART1     AF    

高工
2013-05-13 20:33:13     打赏
2楼
看来新欢远远优于旧爱啊,估计还有其他没发现的优点,楼主及时与大家分享啊。

高工
2013-05-14 09:06:11     打赏
3楼

有可能是同父异母呗。


高工
2013-05-19 01:09:21     打赏
4楼
所以要与时俱进,使用一个新器件是不要想当然,最好还是看看user manal和datasheet先

高工
2013-05-19 07:10:38     打赏
5楼

既然都用函数库了,ST就应该把通用性做好点

所有器件的库尽量通用,会给开发者省不少事呢


高工
2013-05-19 14:25:14     打赏
6楼
用库,省事多了。这几天在写驱动,感觉库配合这mdk470a很方便。

高工
2013-05-19 14:26:33     打赏
7楼
库是很好的了。只是器件功能变了,少了以前的afio。服用功能需要另外的配置

助工
2013-06-06 22:39:59     打赏
8楼

在对上电时间没有严格要求的应用中,初始化的时候用库函数比直接寄存器操作爽多了。。。。顶一个,最近也在用Cortex-M4作业。


高工
2013-06-06 22:45:56     打赏
9楼
可以参考我其他帖子,外设弄出来不少了。

高工
2013-06-07 11:23:26     打赏
10楼
看来M4上位,已经指日可待了。

共15条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]