让“串口通信简单实例-M4”中的函数 USART_SendData 一次能发送32位数

2019-07-20 22:09发布

“串口通信简单实例-M4”中的发送数据函数  USART_SendData  一次只能发送8位
我想通过修改函数让它能一次发送32位数,比如  USART_SendData(USART1,0x12345678)能直接把这个32位数发出来,
做出修改如下:

原函数代码:
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_DATA(Data));

  /* Transmit Data */
  USARTx->DR = (Data & (uint16_t)0x01FF);

现函数代码:
void USART_SendData(USART_TypeDef* USARTx, uint32_t Data)
{
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  //assert_param(IS_USART_DATA(Data));

  USARTx->DR = (( Data & (uint32_t)0xff000000 ) >>24);
  USARTx->DR = (( Data & (uint32_t)0xff0000 ) >>16);
  USARTx->DR = (( Data & (uint32_t)0xff00 ) >>8);
  USARTx->DR = ( Data & (uint32_t)0xff ) ;

}
(注:也尝试过简单将原本代码最后一行换成  USARTx->DR = Data ;,但没有卵用)


结果都无法实现目的,无论怎么改,最后都是发送8位,用调试助手检测到的就是16进制的 78
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
beary
1楼-- · 2019-07-21 13:55
本帖最后由 beary 于 2016-5-20 19:59 编辑
正点原子 发表于 2016-5-18 16:19
每写一次DR,都要等待发送完成,再写下一次!

1.谢谢帮我删了重复贴,第一次发帖,发错地方了。

2.谢谢解答

3.请问,是不是简单加上delay就可以成功?还是说需要去哪个状态寄存器看看,确认它发送完了才能进行下次的发送?
【问题已解决:】
后面加上     while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
只有等确认之前的数发送完了,才会跳出这个循环,继续下一步发数

一周热门 更多>