完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
把推免 上拉 复用都试一遍不就得了
|
|
|
|
STM32F0XX的固件库写F2XX F4XX 是相同的。 与F10X不同。你可以查看库中的样例程序。
功能复用时是使用 GPIO_PinAFConfig函数 进行引脚映射。 /* Connect PXx to USARTx_Tx*/ GPIO_PinAFConfig(COM_TX_PORT[COM], COM_TX_AF_PIN[COM], COM_AF[COM]); /* Connect PXx to USARTx_Rx*/ GPIO_PinAFConfig(COM_RX_PORT[COM], COM_RX_AF_PIN[COM], COM_AF[COM]); |
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure; RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE); // 使能GPIOB端口 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 使能串口1时钟 GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1); ///////////////////////////////////////////////////////////////////////////////////// /* * USART1_TX -> PA9 , USART1_RX -> PA10 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); ///////////////////////////////////////////////////////////////////////////////////// USART_InitStructure.USART_BaudRate = 9600; //设置串口波特率 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_ITConfig(USART1, USART_IT_RXNE,ENABLE); //打开中断 USART_Cmd(USART1, ENABLE);//使能串口1 给你一个最全的,试试,F0的串口配置代码 |
|
|
|
void usart1_init(unsigned int BaudRate)
{ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //打开GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //打开usart时钟 //GPIO_DeInit(GPIOA); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1); /* Configure pins as AF pushpull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); //USART_DeInit(USART1); USART_InitStructure.USART_BaudRate = BaudRate; 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_ITConfig(USART1,USART_IT_RXNE,ENABLE); //使能接收中断 USART_Cmd(USART1, ENABLE); USART_ClearFlag(USART1, USART_FLAG_TC); } 这个配置可以用的, 具体可以看http://www.stmcu.org/bbs/article_244_566828.html |
|
|
|
谢谢大家的回复,因为我是要用它不是做串口,是做ISO7816的CK-PA8和IO-PA9,串口功能像大家那样设确实是可用的。在参看F103的程序时,发现要设GPIO_CRH寄存器:
/* Enable USART3 clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); /* Configure USART3 CK(PB.12) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART3 Tx (PB.10) as alternate function open-drain */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(GPIOA, &GPIO_InitStructure); |
|
|
|
也就通过GPIO_CRH设置成0xFB
即:10:复用功能推挽输出模式 11:复用功能开漏输出模式 MODE:11:输出模式,最大速度50MHz GPIO_TypeDef* 定义的寄存器变了, 程序如下: RCC_APB1PeriphClockCmd(SC_USART_CLK, ENABLE); /* Configure USART1 CK(PA8) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = SC_USART_PIN_CK; //PA8 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SC_USART_GPIO, &GPIO_InitStructure); redata[1]=GPIOA->AFR[1]; /* Configure USART1 Tx (PA9) as alternate function open-drain */ GPIO_InitStructure.GPIO_Pin = SC_USART_PIN_TX; //PA9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //GPIO_Mode_AF_OD GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_Init(SC_USART_GPIO, &GPIO_InitStructure); //redata[1]=GPIOA->AFR[1]; /* Connect PXx to USARTx_Tx */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_1); //¸´Óù¦ÄÜ GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1); 但一直没收到数据。 如果有F0的寄存器的说明就好了。 |
|
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 等于 GPIO_Mode_AF_OD |
|
|
|
1、使用STM的库的同时要关注库的实现,结合STM32寄存器手册来看。
STM32的库升级了,但是寄存器定义是没有变化的,所以只要具体看其实现就可以了。 一个IO有几个复用功能,可以通过寄存器的bit位来确定,只要看老版本的库怎么设置寄存器的,对应在新版本的库中使用此种设置即可 |
|
|
|
F0的HAL库中只有这一种配置了,是芯片不一样的了,这样配置就可以的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
991 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
970 浏览 2 评论
2080 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1177 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1599 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 21:10 , Processed in 0.908640 second(s), Total 89, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号