完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 LED_Init(); //LED端口初始化 LCD_Init(); KEY_Init();//初始化按键 RTC_Init();//初始化RTC Adc_Init();//初始化ADC Adc_Init(); //初始化ADC在ad.c源文件中,初始化的是规则通道1,不是通道16 //获取STM32内部温度传感器的温度 //temp:存放温度字符串的首地址.如"28.3"; //temp,最少得有5个字节的空间! void get_temperature(u8 *temp) { u16 t; float temperate; temperate=Get_Adc_Average(ADC_CH_TEMP,10); temperate=temperate*(3.3/4096); temperate=(1.43-temperate)/0.0043+25;//计算出当前温度值 t=temperate*10;//得到温度 num2str(t/10,temp,2); temp[2]='.';temp[3]=t%10+'0';temp[4]=0;//最后添加结束符 } 原本就没有初始化STM32内部温度传感器,怎么突然调用了, 正确的调用应该是调用tsensor.c源文件中的函数 而不是ad.c源文件中的函数 当然这里主要是初始化函数不对,其他两个函数都是通用的 正常调用应该是 T_Adc_Init(void) //ADC通道初始化 T_Get_Adc_Average(u8 ch,u8 times) 这两个函数才是应该调用的 新手上路,错了还望大侠们勿拍砖! |
|
相关推荐
2个回答
|
|
|
原子哥,这是实验52 ENC28J60实验 main.c中的代码 注意看!!!!!!!!!!!!!!!!!!!!!!!!!
#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" #include "rtc.h" #include "adc.h" #include "tsensor.h" #include "enc28j60.h" #include "uip.h" #include "uip_arp.h" #include "tapdev.h" #include "timer.h" #include "math.h" #include "string.h" //ALIENTEK战舰STM32开发板实验52 //ENC28J60网络 实验 //技术支持:www.openedv.com //广州市星翼电子科技有限公司 void uip_polling(void); #define BUF ((struct uip_eth_hdr *)&uip_buf[0]) extern u32 LCD_Pow(u8 m,u8 n); //数字->字符串转换函数 //将num数字(位数为len)转为字符串,存放在buf里面 //num:数字,整形 //buf:字符串缓存 //len:长度 void num2str(u16 num,u8 *buf,u8 len) { u8 i; for(i=0;i buf=(num/LCD_Pow(10,len-i-1))%10+'0'; } } //获取STM32内部温度传感器的温度 //temp:存放温度字符串的首地址.如"28.3"; //temp,最少得有5个字节的空间! void get_temperature(u8 *temp) { u16 t; float temperate; temperate=Get_Adc_Average(ADC_CH_TEMP,10); temperate=temperate*(3.3/4096); temperate=(1.43-temperate)/0.0043+25;//计算出当前温度值 t=temperate*10;//得到温度 num2str(t/10,temp,2); temp[2]='.';temp[3]=t%10+'0';temp[4]=0;//最后添加结束符 } //获取RTC时间 //time:存放时间字符串,形如:"2012-09-27 12:33" //time,最少得有17个字节的空间! void get_time(u8 *time) { RTC_Get(); time[4]='-';time[7]='-';time[10]=' '; time[13]=':';time[16]=0;//最后添加结束符 num2str(calendar.w_year,time,4);//年份->字符串 num2str(calendar.w_month,time+5,2); //月份->字符串 num2str(calendar.w_date,time+8,2); //日期->字符串 num2str(calendar.hour,time+11,2); //小时->字符串 num2str(calendar.min,time+14,2); //分钟->字符串 } int main(void) { u8 key; u8 tcnt=0; u8 tcp_server_tsta=0XFF; u8 tcp_client_tsta=0XFF; uip_ipaddr_t ipaddr; delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 LED_Init(); //LED端口初始化 LCD_Init(); KEY_Init();//初始化按键 RTC_Init();//初始化RTC Adc_Init();//初始化ADC!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 就是这一句,这个是不是有些问题 ...................... POINT_COLOR=RED;//设置为红色 LCD_ShowString(60,10,200,16,16,"WarShip STM32"); LCD_ShowString(60,30,200,16,16,"ENC28J60 TEST"); LCD_ShowString(60,50,200,16,16,"ATOM@ALIENTEK"); while(tapdev_init())//初始化ENC28J60错误 { LCD_ShowString(60,70,200,16,16,"ENC28J60 Init Error!"); delay_ms(200); LCD_Fill(60,70,240,86,WHITE);//清除之前显示 }; uip_init();//uIP初始化 LCD_ShowString(60,70,200,16,16,"KEY0:Server Send Msg"); LCD_ShowString(60,90,200,16,16,"KEY2:Client Send Msg"); LCD_ShowString(60,110,200,16,16,"IP:192.168.1.16"); LCD_ShowString(60,130,200,16,16,"MASK:255.255.255.0"); LCD_ShowString(60,150,200,16,16,"GATEWAY:192.168.1.1"); LCD_ShowString(30,200,200,16,16,"TCP RX:"); LCD_ShowString(30,220,200,16,16,"TCP TX:"); LCD_ShowString(30,270,200,16,16,"TCP RX:"); LCD_ShowString(30,290,200,16,16,"TCP TX:"); POINT_COLOR=BLUE; uip_ipaddr(ipaddr, 192,168,1,16);//设置本地设置IP地址 uip_sethostaddr(ipaddr); uip_ipaddr(ipaddr, 192,168,1,1); //设置网关IP地址(其实就是你路由器的IP地址) uip_setdraddr(ipaddr); uip_ipaddr(ipaddr, 255,255,255,0);//设置网络掩码 uip_setnetmask(ipaddr); uip_listen(HTONS(1200));//监听1200端口,用于TCP Server uip_listen(HTONS(80));//监听80端口,用于Web Server tcp_client_reconnect(); //尝试连接到TCP Server端,用于TCP Client while (1) { uip_polling();//处理uip事件,必须插入到用户程序的循环体中 key=KEY_Scan(0); if(tcp_server_tsta!=tcp_server_sta)//TCP Server状态改变 { if(tcp_server_sta&(1<<7))LCD_ShowString(30,180,200,16,16,"TCP Server Connected "); else LCD_ShowString(30,180,200,16,16,"TCP Server Disconnected"); if(tcp_server_sta&(1<<6))//收到新数据 { LCD_Fill(86,200,240,216,WHITE);//清除之前显示 LCD_ShowString(86,200,154,16,16,tcp_server_databuf); printf("TCP Server RX:%srn",tcp_server_databuf);//打印数据 tcp_server_sta&=~(1<<6);//标记数据已经被处理 } tcp_server_tsta=tcp_server_sta; } if(key==KEY_RIGHT)//TCP Server 请求发送数据 { if(tcp_server_sta&(1<<7))//连接还存在 { sprintf((char*)tcp_server_databuf,"TCP Server OK %drn",tcnt); LCD_Fill(86,220,240,236,WHITE);//清除之前显示 LCD_ShowString(86,220,154,16,16,tcp_server_databuf);//显示当前发送数据 tcp_server_sta|=1<<5;//标记有数据需要发送 tcnt++; } } if(tcp_client_tsta!=tcp_client_sta)//TCP Client状态改变 { if(tcp_client_sta&(1<<7))LCD_ShowString(30,250,200,16,16,"TCP Client Connected "); else LCD_ShowString(30,250,200,16,16,"TCP Client Disconnected"); if(tcp_client_sta&(1<<6))//收到新数据 { LCD_Fill(86,270,240,286,WHITE);//清除之前显示 LCD_ShowString(86,270,154,16,16,tcp_client_databuf); printf("TCP Client RX:%srn",tcp_client_databuf);//打印数据 tcp_client_sta&=~(1<<6);//标记数据已经被处理 } tcp_client_tsta=tcp_client_sta; } if(key==KEY_LEFT)//TCP Client 请求发送数据 { if(tcp_client_sta&(1<<7))//连接还存在 { sprintf((char*)tcp_client_databuf,"TCP Client OK %drn",tcnt); LCD_Fill(86,290,240,306,WHITE);//清除之前显示 LCD_ShowString(86,290,154,16,16,tcp_client_databuf);//显示当前发送数据 tcp_client_sta|=1<<5;//标记有数据需要发送 tcnt++; } } delay_ms(1); } } //uip事件处理函数 //必须将该函数插入用户主循环,循环调用. void uip_polling(void) { u8 i; static struct timer periodic_timer, arp_timer; static u8 timer_ok=0; if(timer_ok==0)//仅初始化一次 { timer_ok = 1; timer_set(&periodic_timer,CLOCK_SECOND/2); //创建1个0.5秒的定时器 timer_set(&arp_timer,CLOCK_SECOND*10); //创建1个10秒的定时器 } uip_len=tapdev_read();//从网络设备读取一个IP包,得到数据长度.uip_len在uip.c中定义 if(uip_len>0) //有数据 { //处理IP数据包(只有校验通过的IP包才会被接收) if(BUF->type == htons(UIP_ETHTYPE_IP))//是否是IP包? { uip_arp_ipin();//去除以太网头结构,更新ARP表 uip_input(); //IP包处理 //当上面的函数执行后,如果需要发送数据,则全局变量 uip_len > 0 //需要发送的数据在uip_buf, 长度是uip_len (这是2个全局变量) if(uip_len>0)//需要回应数据 { uip_arp_out();//加以太网头结构,在主动连接时可能要构造ARP请求 tapdev_send();//发送数据到以太网 } }else if (BUF->type==htons(UIP_ETHTYPE_ARP))//处理arp报文,是否是ARP请求包? { uip_arp_arpin(); //当上面的函数执行后,如果需要发送数据,则全局变量uip_len>0 //需要发送的数据在uip_buf, 长度是uip_len(这是2个全局变量) if(uip_len>0)tapdev_send();//需要发送数据,则通过tapdev_send发送 } }else if(timer_expired(&periodic_timer))//0.5秒定时器超时 { timer_reset(&periodic_timer);//复位0.5秒定时器 //轮流处理每个TCP连接, UIP_CONNS缺省是40个 for(i=0;i uip_periodic(i);//处理TCP通信事件 //当上面的函数执行后,如果需要发送数据,则全局变量uip_len>0 //需要发送的数据在uip_buf, 长度是uip_len (这是2个全局变量) if(uip_len>0) { uip_arp_out();//加以太网头结构,在主动连接时可能要构造ARP请求 tapdev_send();//发送数据到以太网 } } #if UIP_UDP//UIP_UDP //轮流处理每个UDP连接, UIP_UDP_CONNS缺省是10个 for(i=0;i uip_udp_periodic(i);//处理UDP通信事件 //当上面的函数执行后,如果需要发送数据,则全局变量uip_len>0 //需要发送的数据在uip_buf, 长度是uip_len (这是2个全局变量) if(uip_len > 0) { uip_arp_out();//加以太网头结构,在主动连接时可能要构造ARP请求 tapdev_send();//发送数据到以太网 } } #endif //每隔10秒调用1次ARP定时器函数 用于定期ARP处理,ARP表10秒更新一次,旧的条目会被抛弃 if(timer_expired(&arp_timer)) { timer_reset(&arp_timer); uip_arp_timer(); } } } |
|
|
|
|
|
没问题啊
|
|
|
|
|
只有小组成员才能发言,加入小组>>
952 浏览 0 评论
如何使用STM32+nrf24l01架构把有线USB设备无线化?
3106 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
3008 浏览 5 评论
3877 浏览 3 评论
3327 浏览 8 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
1289浏览 1评论
1232浏览 0评论
920浏览 0评论
988浏览 0评论
952浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 21:12 , Processed in 1.330996 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
786