STM32学习笔记:adc采样得到的电压值用485发送给pc

采用adc1的通道10,将采集到的电压值用485发送给PC显示, 
先上原理图, 
STM32学习笔记:adc采样得到的电压值用485发送给pc_第1张图片 
STM32学习笔记:adc采样得到的电压值用485发送给pc_第2张图片 
源代码见附件, 
这里想说的是几个要注意的问题: 
1,ad输入的电压经过了R42和R44进行分压,所以pc显示的电压值将会减半, 
2、采用这个函数进行发送数据的时候,每次都是发送一个8位的数据(即一个字节),也就是最大值为256,。超过1个字节默认发送地位,即你要发送的数据位0x0145,只会发送45,具体可以参考数据手册,下图,

USART_SendData(USART3,ADC_Value_B);1

STM32学习笔记:adc采样得到的电压值用485发送给pc_第3张图片 
3,pc 机上收集到的数据,如果没有勾选“以HEX显示”则显示的是acsii码,而我们发送数据给PC机发送的则是hex,所以这里要进行一次转换。HEX–>ascii 
4、控制485的发送和接收的引脚是TR485-U3–>PB12, 通过光耦隔离芯片,接到了485的RE’和DE上,由光耦可知,PB12=1,光耦中的1,2脚不导通,没有光发射到3,4引脚,RE’/DE输出为低电压,也就是RE’有效,接收数据。反之,PB12 = 0,发送数据。

//RS485发送len个字节.//buf:发送区首地址//len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
void RS485_Send_Data(u8 *buf,u8 len){
    u8 t;    
        RS485_TX_EN(0);         //设置为发送模式
    for(t=0;t 
  
           {           =""         usart_senddata(usart3,buf[t]);     =""         while(usart_getflagstatus(usart3, usart_flag_tc) ="= RESET);//等待发送完成,标志位置1."     }    =""     while(usart_getflagstatus(usart3, usart_flag_tc) ="= RESET); //USART_FLAG_TC为发送完成标志位。如果使能了TC这个为的中断就会产生中断。置1; "     rs485_tx_en(1);             ="" 设置为接收模式   }12345678910111213141516<="" pre="">

附件:  http://download.csdn.net/detail/qq_33559992/9581825

你可能感兴趣的:(嵌入式&C&C++&单片机)