OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11151|回复: 13

USART_SendData(USART1, 1024);它是怎么发送1024的?

[复制链接]

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-4-8
在线时间
1 小时
发表于 2015-11-29 18:41:42 | 显示全部楼层 |阅读模式
5金钱
va=xbuffer[0]*1000+xbuffer[1]*100+xbuffer[2]*10+xbuffer[3];
USART_SendData(USART1, va);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
当VA=1024时它是以什么方式发送出去的,是先发送低八位八个零然后再发送高8位00000010吗?能让他一次就发送多个字节吗?

最佳答案

查看完整内容[请看2#楼]

回复【9楼】走刀口: --------------------------------- 循环发送  直到结束   看看下面这code  自己思考写一个吧 void Wifi_Send(uint8_t * buf , uint16_t len) { int temp= 0 ; for(temp = 0 ; temp< len ;temp++) { while (USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-11-29 18:41:43 | 显示全部楼层
回复【9楼】走刀口:
---------------------------------
循环发送  直到结束   看看下面这code  自己思考写一个吧


void Wifi_Send(uint8_t * buf , uint16_t len)
{
int temp= 0 ;
for(temp = 0 ; temp< len ;temp++)
{
while (USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET) 
{
;
}
                USART_SendData(UART4, buf[temp]);     
}
}
学无止境
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-11-29 18:48:54 | 显示全部楼层
那串口助手看看就知道了
回复

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-4-8
在线时间
1 小时
 楼主| 发表于 2015-11-30 10:36:15 | 显示全部楼层
回复【2楼】ricefat:
--------------------------回复【2楼】ricefat:
---------------------------------
用串口助手看发1024收到的也是1024,我怎么看看完整的二进制数据啊,包括起始位停止位什么的
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-11-30 10:39:30 | 显示全部楼层
回复【3楼】走刀口:
---------------------------------
那串口助手看不了

肯定是8位往上发的,这个是标准的串口协议
回复

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-4-8
在线时间
1 小时
 楼主| 发表于 2015-11-30 14:48:19 | 显示全部楼层
回复【4楼】ricefat:
---------------------------------
USART_SendData(USART1, 1024),这个语句发送的时候是把1024以二进制的形式先发送低8位,再发送高8位,还是只能发送低8位啊?我用FPGA写的模拟串口接收,只有低8为的数据,没有高8位的数据。
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-11-30 14:55:48 | 显示全部楼层
回复【5楼】走刀口:
---------------------------------
把这个USART_SendData(USART1, 1024)函数封装再往下一层看看就知道是如何发送的了
回复

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-4-8
在线时间
1 小时
 楼主| 发表于 2015-11-30 15:08:47 | 显示全部楼层
回复【6楼】ricefat:
---------------------------------
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);
}
这是下一层的,根据USARTx->DR = (Data & (uint16_t)0x01FF)这个知道一次是发送8位数据;1024换成二进制有十位数,我就想知道这个语句发送低8位00000000后还接着发送高8位00000010,还是就不发送了,把高8位舍弃了?
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-11-30 15:25:05 | 显示全部楼层
回复【7楼】走刀口:
---------------------------------
低9位有效,兼容低8位有效

高8位舍掉了
回复

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-4-8
在线时间
1 小时
 楼主| 发表于 2015-11-30 16:39:38 | 显示全部楼层
回复【8楼】ricefat:
---------------------------------
非常谢谢你耐心的解答,不过我还想问问我想高8位和低8位一起发送怎么办,要分两次发送吗,还是用usart的DMA模式啊。想发送多个字节的时候有什么好的方法啊,谢谢了!
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-11-30 17:13:32 | 显示全部楼层
回复【9楼】走刀口:
---------------------------------
串口协议最多一次9位。
for循环或是DMA都可以

你可以参考printf打印串口的相关代码。
回复

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-4-8
在线时间
1 小时
 楼主| 发表于 2015-11-30 19:26:02 | 显示全部楼层
回复【11楼】jermy_z:
---------------------------------
用数组发送第一次发8个零,第二次发00000010;前提是先把1024分成这两个8位数据,是不是得先写个十进制转十六进制的程序,然后把高低位分别放数组里依次发送啊
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-11-30 20:05:40 | 显示全部楼层
回复【12楼】走刀口:
---------------------------------
学无止境
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-12-1 09:49:00 | 显示全部楼层
回复【12楼】走刀口:
---------------------------------
不需要转换,单片机里面都是二进制存储的,在开发环境上的进制只是给人看的而已。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 23:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表