STM32F103ZE 串口4问题

2019-07-20 21:03发布

我的串口4 搞了半天还是一点输出都没有 。

初始化代码:

void UART4_Configuration(u32 m)
{
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef  USART_ClockInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE );

USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; // ?±????????????
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; // ?±????????
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; // ?±????????±???????????????
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; // ×??ó???????????±??????????SCLK????
USART_ClockInit(UART4, &USART_ClockInitStructure); // ?±?????????????è??  
USART_InitStructure.USART_BaudRate = m;  // ?¨????????115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b;  // 8??????
USART_InitStructure.USART_StopBits = USART_StopBits_1;  // ?????á??????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(UART4, &USART_InitStructure);    
USART_ClearFlag(UART4, USART_IT_RXNE); //???????????????????????ó?????ú?ú????
USART_ITConfig(UART4,USART_IT_RXNE, ENABLE); //????UART4??????
USART_Cmd(UART4, ENABLE); //UART4×??????????? 
}


端口初始化 :

/*UART4?®???????¨??*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //TX
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //×???????????50MHz?????è??
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;// GPIO_Mode_AF_PP
  GPIO_Init(GPIOC, &GPIO_InitStructure);//????A????
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //RX
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //×???????????50MHz?????è??
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;// ???????? ?????è??
  GPIO_Init(GPIOC, &GPIO_InitStructure);//????A????

int fputc(int ch, FILE *f)
{

   USART_SendData(UART4, (u8) ch);
 
   /* ???·???±???????á?? */
   while(USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET) //????
   {
   }
   return ch;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
正点原子
1楼-- · 2019-07-21 00:32
给你参考代码:
[mw_shl_code=c,true]//初始化IO 串口3 //pclk1CLK1时钟频率(Mhz) //bound:波特率 void uart4_init(u32 pclk1,u32 bound) { float temp; u16 mantissa; u16 fraction; temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV mantissa=temp; //得到整数部分 fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4; mantissa+=fraction; RCC->APB2ENR|=1<<4; //使能PORTC口时钟 RCC->APB1ENR|=1<<19; //使能串口4时钟 GPIOC->CRH&=0XFFFF00FF; //IO状态设置 GPIOC->CRH|=0X00008B00; //IO状态设置 GPIOC->ODR|=1<<11; //rx上拉 RCC->APB1RSTR|=1<<19; //复位串口4 RCC->APB1RSTR&=~(1<<19);//停止复位 //波特率设置 UART4->BRR=mantissa; // 波特率设置 UART4->CR1|=0X200C; //1位停止,无校验位. //使能接收中断 UART4->CR1|=1<<8; //PE中断使能 UART4->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(2,0,UART4_IRQChannel,2);//组2,抢占3,响应2, } [/mw_shl_code]
xuande
2楼-- · 2019-07-21 03:31
看输出端有波形没有;

如果没有,说明没有启动,比如没有打开时钟,或者没有使能Tx;

如果有波形,而对方收不到,就是具体参数问题,比如波特率、格式、或者对方接收有问题。
幽灵骑士
3楼-- · 2019-07-21 06:38
没波形~~啥都没有 。 考虑 到线路问题 就冲洗配置端口为推挽输出,然后输出高低切换,可以正常。 重新配置成串口就不行~
幽灵骑士
4楼-- · 2019-07-21 09:32
 精彩回答 2  元偷偷看……
幽灵骑士
5楼-- · 2019-07-21 09:33
回复【4楼】正点原子:
---------------------------------
还是不行。 没有任何数据。。
正点原子
6楼-- · 2019-07-21 15:25
 精彩回答 2  元偷偷看……

一周热门 更多>