打印
[STM32F2]

STM32F207VC USART1 发送寄存器DR值写不进去

[复制链接]
6808|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
walliam0620|  楼主 | 2015-2-27 10:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DR寄存器写不进去值,不知道是不是配置有问题,求大神们帮助!
void uart_init(void)
{
  USART_InitTypeDef USART_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
  
  /* Enable GPIO clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  
  /* Enable USART clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  
  /* Connect USART pins to AF7 */
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);
  
  /* Configure USART Tx and Rx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  /* USARTx configuration ----------------------------------------------------*/
  /* USARTx configured as follow:
        - BaudRate = 3750000 baud
                   - Maximum BaudRate that can be achieved when using the Oversampling by 8
                     is: (USART APB Clock / 8)
                         Example:
                            - (USART3 APB1 Clock / 8) = (30 MHz / 8) = 3750000 baud
                            - (USART1 APB2 Clock / 8) = (60 MHz / 8) = 7500000 baud
                   - Maximum BaudRate that can be achieved when using the Oversampling by 16
                     is: (USART APB Clock / 16)
                         Example: (USART3 APB1 Clock / 16) = (30 MHz / 16) = 1875000 baud
                         Example: (USART1 APB2 Clock / 16) = (60 MHz / 16) = 3750000 baud
        - Word Length = 8 Bits
        - one Stop Bit
        - No parity
        - Hardware flow control disabled (RTS and CTS signals)
        - Receive and transmit enabled
  */
  USART_InitStructure.USART_BaudRate = 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);
  
  /* NVIC configuration */
  /* Configure the Priority Group to 2 bits */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* Enable the USARTx Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  /* Enable USART */
  USART_Cmd(USART1, ENABLE);
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
}

主函数如下:
int main(void)
{
        uart_init();
        while (1)
  {       
                USART_SendData(USART1, 0x0055);
                delay(1000);
  }
}
沙发
yiwang1011| | 2015-2-27 11:48 | 只看该作者
写之前清标志位

使用特权

评论回复
板凳
mmuuss586| | 2015-2-27 12:13 | 只看该作者
RXD引脚最好设置成浮空输入模式;

使用特权

评论回复
地板
walliam0620|  楼主 | 2015-2-27 14:53 | 只看该作者

发送之前只有TC和TXE两个标志位置位了,其余标志位均已清零,为何还是写不进去DR值?

使用特权

评论回复
5
搞IT的| | 2015-2-28 16:45 | 只看该作者
看的不是很明白,不知为何还是写不进去DR值

使用特权

评论回复
6
七宝汇| | 2015-3-26 22:56 | 只看该作者
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//这句话不需要,嵌套中断也不需要,发送之前清除一下标志位

使用特权

评论回复
7
gengpeng824| | 2015-6-26 17:13 | 只看该作者
同样遇到这个问题,没有解决,如果楼主解决了,给点信息。

使用特权

评论回复
8
尤彼卡| | 2015-6-29 21:24 | 只看该作者
RXD引脚最好设置成浮空输入模式

为什么呢

使用特权

评论回复
9
FireRiver9| | 2015-6-29 21:29 | 只看该作者
发送之前清除一下标志位

使用特权

评论回复
10
lwsn| | 2015-6-29 22:00 | 只看该作者
为什么会写不进去呢

使用特权

评论回复
11
冰河w| | 2015-6-30 17:01 | 只看该作者
楼主能写进去DR寄存器了吗

使用特权

评论回复
12
gengpeng824| | 2015-8-6 16:54 | 只看该作者
uart的寄存器有发送寄存器和接受寄存器(TDR寄存器和RDR寄存器),在调试的过程中,查看DR寄存器的值是无法看到发送寄存器的值的,因此楼主的问题可能是发送出去了,调试中没看到。建议遇到此问题的人确认下是否发送出去了,硬件TX和RX连接下,串口调试下就好。

使用特权

评论回复
13
hugo0chen| | 2017-2-15 20:41 | 只看该作者
我的STM32L151串口DR寄存器写不去了,发送不了数据。

使用特权

评论回复
14
稳稳の幸福| | 2017-2-15 23:24 | 只看该作者
USART_DR 串口数据(Data)寄存器;这是一个双寄存器,包含了TDR和RDR,对它读操作,读取的是RDR寄存器的值,对它的写操作,实际上是写到TDR寄存器的;当向该寄存器写数据的时候,串口就会自动发送,当收到收据的时候,也是存在该寄存器内。

使用特权

评论回复
15
hugo0chen| | 2017-2-16 12:20 | 只看该作者
hugo0chen 发表于 2017-2-15 20:41
我的STM32L151串口DR寄存器写不去了,发送不了数据。

是配置的时候调用PinAFConfig( )函数失败,我改成寄存器直接写入,GPIOB->AFR[1] |= 0x00000700;
GPIOB->AFR[1] |= 0x00007000;工作正常了,之前也遇到这个问题。
提醒大家遇到这个PinAFconfig()调用时,要小心。

使用特权

评论回复
16
foxjx| | 2017-3-7 22:29 | 只看该作者
我也碰到了同样的问题,谁的解决了,求大神分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

8

帖子

0

粉丝