OpenEdv-开源电子网

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

通过AD采集温度 然后将数据发送到上位机上 为什么上位机上出现的会是乱码

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-11-1
在线时间
0 小时
发表于 2015-11-1 20:25:18 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include "lcd.h" #include "adc.h" #include "timer.h" u16 s; //ALIENTEK Mini STM32??·?°?·????ú??15 //ADC???é //?????§????www.openedv.com //?????????í??×????????????? int main(void) { u16 adcx; float temp; delay_init(); //???±?????????? NVIC_Configuration(); //?è??NVIC????·?×é2:2????????????; 2???ì???????? uart_init(9600); //?®??????????9600 TIM3_Int_Init(4999,7199);//10Khz??????????????????5000??500ms LED_Init(); //????????LED?????????????? LCD_Init(); Adc_Init(); //ADC?????? POINT_COLOR=RED;//?è??×??????ì?? LCD_ShowString(60,50,200,16,16,"Mini STM32"); LCD_ShowString(60,70,200,16,16,"ADC TEST"); LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,16,16,"2014/3/9"); //void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p) //?????á?????? POINT_COLOR=BLUE;//?è??×????????? LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:"); LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V"); while(1) { adcx=Get_Adc_Average(ADC_Channel_1,10); s=adcx; LCD_ShowxNum(156,130,adcx,4,16,0);//????ADC???? //void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode) temp=(float)adcx*(3.3/4096); adcx=temp; LCD_ShowxNum(156,150,adcx,1,16,0);//?????????? temp-=adcx; temp*=1000; LCD_ShowxNum(172,150,temp,3,16,0X80); LED0=!LED0; delay_ms(200); } } void TIM3_IRQHandler(void) //TIM3???? { uint16_t Data=s; if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //?ì?é???¨??TIM????·??ú??·?:TIM ?????? { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //????TIMx???????????í??:TIM ?????? LED1=!LED1; USART_SendData(USART1,Data); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); //while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } } [/mw_shl_code]

最佳答案

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

因为你发送的是二进制数据.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-1 20:25:19 | 显示全部楼层
因为你发送的是二进制数据.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-11-1
在线时间
0 小时
 楼主| 发表于 2015-11-1 21:33:55 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
什么意思啊  原子哥 为什么是二进制数据啊  我不是用senddata发送的么
回复

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-4-14
在线时间
0 小时
发表于 2015-11-1 21:38:13 | 显示全部楼层
上位机设置为显示16进制啊。要显示ASCII码得再作处理呢,或者使用printf
回复

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-4-14
在线时间
0 小时
发表于 2015-11-1 21:40:40 | 显示全部楼层
还有就是USART_SendData(USART1,Data)只发一个字节的吧?
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-11-1
在线时间
0 小时
 楼主| 发表于 2015-11-1 21:43:16 | 显示全部楼层
回复【5楼】chy712:
---------------------我知道是一个字节的  可是我后面不是判断了是否发送完成    没有完成不是继续发送么
回复

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-4-14
在线时间
0 小时
发表于 2015-11-1 21:48:23 | 显示全部楼层
回复【6楼】whc:
---------------------------------
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);这个吗?这个是字节发送完成的标志吧,但Data是两个字节,另外上位机显示的是ASCII码,不能直接显示数字啊,16进制倒是可以
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-11-1
在线时间
0 小时
 楼主| 发表于 2015-11-1 21:52:07 | 显示全部楼层
回复【7楼】chy712:
---------------------------------
噢噢  那怎么判断他的所有数据就是已经发送完了     加了句printf为什么就是直接在上位机上显示数字
回复

使用道具 举报

3

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-4-14
在线时间
0 小时
发表于 2015-11-1 22:06:28 | 显示全部楼层
void UART_Send(uint8_t *Buffer, uint32_t Length)
{
while(Length != 0)
{
while(!((USART1->ISR)&(1<<7)));//等待发送完while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
USART1->TDR= *Buffer;
Buffer++;
Length--;
}
}

printf的话加上下面的才能用,使用微库的话只加重定义fputc函数 就可以了
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 

int handle; 
}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
_sys_exit(int x) 

x = x; 

//重定义fputc函数 
int fputc(int ch, FILE *f)
{
//USART1->DR = (u8) ch;
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
USART1->DR = (u8) ch;      
return ch;
}
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-11-1
在线时间
0 小时
 楼主| 发表于 2015-11-2 00:00:43 | 显示全部楼层
回复【9楼】chy712:
---------------------------------
恩恩   明白了  谢谢大哥啦   大哥真的太热心啦
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 19:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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