单片机DMA传输完成后会把检测目标单片机地址清零吗?急!!

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!K10 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
00:22:33  
uint8_t DMADataBuffer[200]; //DMA数据缓存 DMA每次传送一行数据
//0x400ff052时PORTB PDIR 16-23位 的寄存器地址&&移植时 需要修改 具体参看K10英文DATASHEET
DMA_Init(1,51,(uint32_t)0x400ff052,(uint32_t)DMADataBuffer,1,0,0,1,-200,1,200);
//********************************************************************************
//函数名:DMA_Init
//参&&数:ch& &代表通道,0~15
//& &&&touch& &引起dma请求的触发源 2~63见参考手册85页
//& && &&&sa& &源地址;da 目的地地址;
//& && &&&len&&传输多少的字节数
//& & & & & & & &&&soff&&源地址传一次地址偏移量,0代表源地址不变,1代表源地址每次加1
//& & & & & & & &&&slen&&传输完成后源地址指针返回
//& & & & & & & &&&doff&&目标地址传输一次地址偏移量,0代表目标地址不变,1代表目标地址每次加1
//& && & dlen&&传输完成后目标指针返回
//& && & mode& &dma工作模式选择,0代表dma软件启动传输;1表示通道触发传输;2表示pit周期性触发此时ch取值0~3
//& & counter& &小的循环次数,最多255次(因变量定义问题)
//& &默认配置每次移动1字节,不设置优先级 ,主循环传输完成后产生中断
//& &注意:在使用地址时加强制转换,一次传输8位,当counter=1时len可以&1,如果counter&1则len只能等于1,目前测试其它不稳定
//目前此函数可以进行数组到数组的传递,数到数组的传递,固定地址到变化地址的传递等,只要合理的配置地址指针就可以实现& & & &
//&&目前不能进行pit周期性触发
//日期:日
////////////////////////////////////////////
void DMA_Init(uint8_t ch,uint8_t touch,uint32_t sa,uint32_t da,uint32_t len,uint8_t soff,int8_t slen,uint8_t doff,int8_t dlen,uint8_t mode,uint32_t counter)
& & SIM-&SCGC7|=SIM_SCGC7_DMA_MASK;//开启DMA模块时钟,见参考手册272页
& & & & DMA0-&TCD[ch].NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(len);//配置数据传输的多少字节,见手册447页
& & & & DMA0-&TCD[ch].SADDR=DMA_SADDR_SADDR(sa);& &//设置源地址, 见参考手册445页
& & & & DMA0-&TCD[ch].SOFF=DMA_SOFF_SOFF(soff);&&//配置通道的地址偏移量为每次加1个地址& & & && & 见参考手册446页
& & & & DMA0-&TCD[ch].ATTR=(DMA_ATTR_SMOD(0)|DMA_ATTR_SSIZE(0x0)|DMA_ATTR_DMOD(0)|DMA_ATTR_DSIZE(0x0));//配置通道的属性一次8位& & & &&&见参考手册446页
& & & & DMA0-&TCD[ch].SLAST=DMA_SLAST_SLAST(slen);//设置数据完成后指针不返回,见参考手册450页
& & & & DMA0-&TCD[ch].DADDR=DMA_DADDR_DADDR(da) ;& &//设置目的地址,见参考手册450页
& & & & DMA0-&TCD[ch].DOFF=DMA_DOFF_DOFF(doff);&&//目标地址每次传输偏移量,见参考手册451页
& & & & DMA0-&TCD[ch].DLAST_SGA=DMA_DLAST_SGA_DLASTSGA(dlen);//完毕后目标地址不返回,见参考手册453页
& & & & DMA0-&TCD[ch].CSR|=(DMA_CSR_INTMAJOR_MASK|DMA_CSR_DREQ_MASK);& & & && &//见参考手册455页
& & & & switch(ch)
& & & && &case 0: NVIC_EnableIRQ(DMA0_IRQn); //开启中断标号
& & & && &case 1: NVIC_EnableIRQ(DMA1_IRQn); //开启中断标号
& & & && &case 2: NVIC_EnableIRQ(DMA2_IRQn); //开启中断标号
& & & && &case 3: NVIC_EnableIRQ(DMA3_IRQn); //开启中断标号
& & & && &case 4: NVIC_EnableIRQ(DMA4_IRQn); //开启中断标号
& & & && &case 5: NVIC_EnableIRQ(DMA5_IRQn); //开启中断标号
& & & && &case 6: NVIC_EnableIRQ(DMA6_IRQn); //开启中断标号
& & & && &case 7: NVIC_EnableIRQ(DMA7_IRQn); //开启中断标号
& & & && & /*请根据上述方式自己加到15*/
& & & & DMA0-&TCD[ch].CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(counter); //见参考手册452页
& & & & DMA0-&TCD[ch].BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(counter);//配置主循环为1次,见手册457页
& & & & if(mode==0)
& & & && & {&&}
& & & & if(mode==1)
& & & &&&{
& & & && & & & & & //通道触发,没有周期性触发的功能
& & & & & & & & DMA0-&SERQ|=DMA_SERQ_SERQ(ch);//开启对应通道ch使能,见参考手册433页
& & & & & & & & SIM-&SCGC6|=SIM_SCGC6_DMAMUX_MASK ;& & & &&&//开启DMAMUX模块时钟,见参考手册271页
& & & & & & & & DMAMUX-&CHCFG[ch]|=DMAMUX_CHCFG_SOURCE(touch) ;& & & & //设置ch通道触发源,见参考手册395页
& & & & & & & & DMAMUX-&CHCFG[ch]|=(DMAMUX_CHCFG_ENBL_MASK); // 使能DMA-ch通道,见参考手册395页
& & & &&&}
& & & & if(mode==2)
& & & &&&{
& & & && && &//通道触发,带有周期性触发的功能&&(此功能没有实现,原因不明)
& & & &&&& & & & DMA0-&SERQ|=DMA_SERQ_SERQ(ch);//开启对应通道ch使能,见参考手册433页
& & & & & & & & SIM-&SCGC6|=SIM_SCGC6_DMAMUX_MASK ;& & & && &//开启DMAMUX模块时钟,见参考手册271页
& & & & & & & & DMAMUX-&CHCFG[ch]|=(DMAMUX_CHCFG_ENBL_MASK|DMAMUX_CHCFG_TRIG_SHIFT|DMAMUX_CHCFG_SOURCE(touch)); //使能DMA-ch通道及pit周期性触发,见参考手册395页
& & & &&&}
编译后会出现integer conversion resulted in truncation这个warning,在此处DMA_Init(1,51,(uint32_t)0x400ff052,(uint32_t)DMADataBuffer,1,0,0,1,-200,1,200);求解答。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司> 《MCU工程师炼成记(丁武锋)》高清书签完整中文版《MCU工程师炼成记(丁武锋)》高清书签完整中文版已有 452266个资源编辑推荐相关资源下载专区TI最新应用解决方案&&智能端到端上传者其他资源嵌入式开发热门资源本周本月全部文档信息资源大小:24.26MB上 传 者: () 上传日期:资源类型:技术书籍资源积分:1分评
论:下载次数:70参与讨论:标&&&&签:分&&&&享:文档简介大多数电子及相关专业的学生在从学生到工程师的这个角色转换的过程中是比较盲目的。正是因为看准了这点,我们才下决心用了一年多的时间编写了《mcu工程师炼成记:我和msp430单片机》。我们希望能够通过把已经走过这段路的工程师们的经验总结出来以飨读者,这样他们就能够少走很多弯路。
《mcu工程师炼成记:我和msp430单片机》和以往的单片机类书籍有所不同。虽然它还是一本以单片机技术为主线的书,但是本书对于读者在从学生转变为工程师的过程中碰到的各种问题都给出了一定的解答。书中从msp430单片机的架构、开发环境、小实验、项目一直到职场经验的分享,凝聚了太多人的心血和汗水。读者在阅读本书时,可以根据自己的需要,边动手、边阅读,从实践中汲取技术经验并加深对书中内容的理解。文档预览相关帖子大学堂最新课程请选择理由 辱骂 色情 广告提交若举报审核通过,可奖励2下载分举报人:被举报人:秋风少落叶举报的资源分:1* 类型:请选择类型资源无法下载资源分类不正确资源无法使用标题与实际内容不符含有危害国家安全内容含有反动色情等内容含广告内容版权问题,侵犯个人或公司的版权其他* 详细原因:回到顶部EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_.cn 或通过站内短信息或QQ:联系管理员 高进,我们会尽快处理。豆丁微信公众号
君,已阅读到文档的结尾了呢~~
声光调Q+Nd:YAG脉冲激光整形青铜CBN砂轮测控系统设计与试验研究 (1)设计,激光,测量,声光调 Q,声光调Q,控制系统,测量激光,脉冲激光,CBN砂轮,和整形
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
声光调Q+Nd:YAG脉冲激光整形青铜CBN砂轮测控系统设计与试验研究 (1)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口后使用快捷导航没有帐号?
请完成以下验证码
查看: 3684|回复: 5
DMA用于通信,如何判断前次操作完成
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
我想用DAM做USRAT1&发送,在发送下一个数据包之前,首先应该判断上一个数据包是否发送完毕。或者一个DMA通道分时复用IIC和USART通信,需要对上次的传输是否完成进行判断。使用了下面的判断语句:while&(DMA_GetFlagStatus(DMA1_FLAG_TC4)&==&RESET);&&//等待上一个数据帧发送完毕但是仿真的时候老是停留在这个地方,去掉这个语句就能使用,请问如何实现上述功能,完全的程序如下:********************************************************************************&*函数原型:&&void&RS232_SendData(uint8&comm,uint8&Len)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*参数说明:&&comm&:&命令字&*&&&&&&&&&&&&&Len&&:&帧数据长度&&*返回值:&&&&&&无&&&*说明:&&&&&&将待发送的数据发送出去&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&********************************************************************************/void&RS232_SendData(u8&comm,u8&Len)&&&&&//将待发送的数据发送出去{&&&&DMA_InitTypeDef&DMA_InitS&&&&u8&&&&&i&=&0;&&&&struct&DATA_BUF&*send_pk&=&&TXD_BUF[0];&&&&&&&&//初始化定义&&&&//while&(DMA_GetFlagStatus(DMA1_FLAG_TC4)&==&RESET);&&//等待上一个数据帧发送完毕&&&&send_pk-&gtIP_addr&=&IP_ADDR;&&&&&&&&&&&&//设置发送从机的IP地址&&&&send_pk-&gtcommand&=&&&&&&&&&&&&&//设置反回发送命令,&&&&send_pk-&gtlength&=&Len&&&GET_LEN;&&&&//设置帧数据长度&&&&&&&&&&&&send_pk-&gtstate&&=&~GET_ERROR;&&&&&&&&//设置错误标志位,无&&&&&RS232_TxBuffer[0]&=&UART_START0;&&&&RS232_TxBuffer[1]&=&UART_START1;&&&&RS232_TxBuffer[2]&=&IP_ADDR;&&&&&&&&//设置发送从机的IP地址&&&&RS232_TxBuffer[3]&=&&&&&&&&&&&&&//设置反回发送命令,&&&&RS232_TxBuffer[4]&=&Len&&&GET_LEN;&&&&//设置帧数据长度&&&&for(i=0;i&ltLi++)&&&&{&&&&&&&&RS232_TxBuffer[i+5]&=&send_pk-&gtbyte;&&&&&&&&}&&&&&&&&RS232_TxBuffer[Len+5]&=&RS232_SetSum(send_pk);&&&&&&&&//计算校验和&&&&DMA_DeInit(DMA1_Channel4);&&&&&&DMA_InitStructure.DMA_PeripheralBaseAddr&=&USART1_DR_B&&&&DMA_InitStructure.DMA_MemoryBaseAddr&=&(u32)RS232_TxB&&&&DMA_InitStructure.DMA_DIR&=&DMA_DIR_PeripheralDST;&&&&DMA_InitStructure.DMA_BufferSize&=&Len+6;&&&&DMA_InitStructure.DMA_PeripheralInc&=&DMA_PeripheralInc_D&&&&DMA_InitStructure.DMA_MemoryInc&=&DMA_MemoryInc_E&&&&DMA_InitStructure.DMA_PeripheralDataSize&=&DMA_PeripheralDataSize_B&&&&DMA_InitStructure.DMA_MemoryDataSize&=&DMA_MemoryDataSize_B&&&&DMA_InitStructure.DMA_Mode&=&DMA_Mode_N&&&&DMA_InitStructure.DMA_Priority&=&DMA_Priority_VeryH&&&&DMA_InitStructure.DMA_M2M&=&DMA_M2M_D&&&&DMA_Init(DMA1_Channel4,&&DMA_InitStructure);&&&&USART_DMACmd(USART1,&USART_DMAReq_Tx,&ENABLE);&&&&&&&//DMA_ITConfig(DMA1_Channel4,&DMA_IT_TC,&ENABLE);&&&&&&&&&&&&&DMA_Cmd(DMA1_Channel4,&ENABLE);&&&&}
在线时间2 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
你的使用方法不对
用DAM做USRAT1发送,使用DMA发送的一个数据包发送完毕后,才能去使用DMA做其他操作。所以你的程序进行UART发送时,必须等待DMA发送结束,代码如下:void&RS232_SendData(u8&comm,u8&Len)&&&&&//将待发送的数据发送出去{&&&&DMA_InitTypeDef&DMA_InitS&&&&u8&&&&&i&=&0;&&&&struct&DATA_BUF&*send_pk&=&&TXD_BUF[0];&&&&&&&&//初始化定义&&&&...&&&&...&&&&DMA_DeInit(DMA1_Channel4);&&&&&&DMA_InitStructure.DMA_PeripheralBaseAddr&=&USART1_DR_B&&&&DMA_InitStructure.DMA_MemoryBaseAddr&=&(u32)RS232_TxB&&&&DMA_InitStructure.DMA_DIR&=&DMA_DIR_PeripheralDST;&&&&DMA_InitStructure.DMA_BufferSize&=&Len+6;&&&&DMA_InitStructure.DMA_PeripheralInc&=&DMA_PeripheralInc_D&&&&DMA_InitStructure.DMA_MemoryInc&=&DMA_MemoryInc_E&&&&DMA_InitStructure.DMA_PeripheralDataSize&=&DMA_PeripheralDataSize_B&&&&DMA_InitStructure.DMA_MemoryDataSize&=&DMA_MemoryDataSize_B&&&&DMA_InitStructure.DMA_Mode&=&DMA_Mode_N&&&&DMA_InitStructure.DMA_Priority&=&DMA_Priority_VeryH&&&&DMA_InitStructure.DMA_M2M&=&DMA_M2M_D&&&&DMA_Init(DMA1_Channel4,&&DMA_InitStructure);&&&&USART_DMACmd(USART1,&USART_DMAReq_Tx,&ENABLE);&&&&DMA_Cmd(DMA1_Channel4,&ENABLE);}你在主循环中使用轮询的方式:&&&&while&(DMA_GetFlagStatus(DMA1_FLAG_TC4)&==&RESET);&&//等待上一个数据帧发送完毕
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
那这样主程序就干不了其他事情了
那这样主程序就干不了其他事情了,一直在等待发送完毕,还不如不用DMA了。用DMA的意图是,我把数据放缓冲区就不用管它了,然后主程序在去干其他事情,但是不排除发新的数据包的时候前面一个包还没有发出去,只有这个时候才需要等待前一个包发送完成。否则如果是把数据放缓冲区然后主程序在那里死等,没有效率。
&&&&&&&&&&
在线时间2 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
可以使用DMA结束中断,或在启动DMA后作其他事情
在所有事情处理完要发送下一个数据包时查询等待。当然在中断中初始化下一次DMA操作是最省时间的做法。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
原因是程序初始的时候DMA1_FLAG_TC4标志是清零的
原因是程序初始的时候DMA1_FLAG_TC4标志是清零的,得DMA发送数据完成后才会有置1,我在发送数据的时候开始就判断是否是置1从而判断上次发送完毕,结果刚开机DMA1_FLAG_TC4是&0,一直死循环。现在在串口初始化的时候配置DMA做一次传输,就将DMA1_FLAG_TC4&位置1了,以后的发送即可在先前去判断这个位。但是这样做开机会发送一个字节的数据,属于笨办法,有没有更好的方式?/********************************************************************************&*函数原型:&&void&&&&RS232_Init(u32&baud)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*参数说明:&&baud:&波特率&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*返回值:&&&&无&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*说明:&&&&&&USART&通讯口初始化程序&设置帧格式:&8&个数据位,无奇偶效验位,1个停止位&8N1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&********************************************************************************/void&&&&RS232_Init(u32&baud)&&&&//USART&通讯口初始化程序{&&&&USART_InitTypeDef&USART_InitS&&&&&&&&DMA_InitTypeDef&DMA_InitS&&&&USART_InitStructure.USART_BaudRate&=&&&&&&&&&&&&&//波特率设置&&&&&&USART_InitStructure.USART_WordLength&=&USART_WordLength_8b;&&&&&//通讯格式&8N1,无硬件流控&&&&&&USART_InitStructure.USART_StopBits&=&USART_StopBits_1;&&&&&&USART_InitStructure.USART_Parity&=&USART_Parity_No;&&&&&&USART_InitStructure.USART_HardwareFlowControl&=&USART_HardwareFlowControl_N&&&&&&USART_InitStructure.USART_Mode&=&USART_Mode_Rx&|&USART_Mode_Tx;&&&&&&USART_Init(USART1,&&USART_InitStructure);&&&&&&&/*&Enable&the&USART&Transmoit&interrupt:&this&interrupt&is&generated&when&the&&&&&&&&&&USART1&transmit&data&register&is&empty&*/&&&&&&&&&&&&&&&&&&/*&Enable&the&USART&Receive&interrupt:&this&interrupt&is&generated&when&the&&&&&&&&&USART1&receive&data&register&is&not&empty&*/&&&&&&USART_ITConfig(USART1,&USART_IT_RXNE,&ENABLE);&&&&RS232_BufInit();&&&&//初始化发送与接收缓冲区,并构缓冲区环型链表&///////////////////////////////////首先开启一次DMA传送使DMA1_FLAG_TC4&置位/////////////////////&&&&&&&&&DMA_DeInit(DMA1_Channel4);&&&&&&DMA_InitStructure.DMA_PeripheralBaseAddr&=&USART1_DR_B&&&&DMA_InitStructure.DMA_MemoryBaseAddr&=&(u32)RS232_TxB&&&&DMA_InitStructure.DMA_DIR&=&DMA_DIR_PeripheralDST;&&&&DMA_InitStructure.DMA_BufferSize&=&1;&&&&DMA_InitStructure.DMA_PeripheralInc&=&DMA_PeripheralInc_D&&&&DMA_InitStructure.DMA_MemoryInc&=&DMA_MemoryInc_E&&&&DMA_InitStructure.DMA_PeripheralDataSize&=&DMA_PeripheralDataSize_B&&&&DMA_InitStructure.DMA_MemoryDataSize&=&DMA_MemoryDataSize_B&&&&DMA_InitStructure.DMA_Mode&=&DMA_Mode_N&&&&DMA_InitStructure.DMA_Priority&=&DMA_Priority_VeryH&&&&DMA_InitStructure.DMA_M2M&=&DMA_M2M_D&&&&DMA_Init(DMA1_Channel4,&&DMA_InitStructure);&&&&USART_DMACmd(USART1,&USART_DMAReq_Tx,&ENABLE);&&&&&&&&&DMA_Cmd(DMA1_Channel4,&ENABLE);&&&&USART_Cmd(USART1,&ENABLE);&}/********************************************************************************&*函数原型:&&u8&RS232_SetSum&(struct&DATA_BUF&*set_pk)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*参数说明:&&*set_pk&:&指向待计算的数据帧&*返回值:&&&&num_sum&:&8位效验和&&&&*说明:&&&&&&计算数据帧效验和&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&********************************************************************************/u8&RS232_SetSum&(struct&DATA_BUF&*set_pk)&&&&//计算数据帧效验和{&&&&u8&num_sum&=&0;&&&&u8&i&=&0;&&&&&&&&num_sum&=&&UART_START0&+UART_START1;&&&&num_sum&+=&set_pk-&gtIP_&&&&num_sum&+=&set_pk-&gtlength&&&GET_LEN;&&&&num_sum&+=&set_pk-&&&&&&&&&for(i=0;&i&ltset_pk-&&i++)&&&&&&&&num_sum&+=&set_pk-&gtbyte;&&&&return&&&&num_&}/********************************************************************************&*函数原型:&&void&RS232_SendData(uint8&comm,uint8&Len)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*参数说明:&&comm&:&命令字&*&&&&&&&&&&&&&Len&&:&帧数据长度&&*返回值:&&&&&&无&&&*说明:&&&&&&将待发送的数据发送出去&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&********************************************************************************/void&RS232_SendData(u8&comm,u8&Len)&&&&&//将待发送的数据发送出去{&&&&DMA_InitTypeDef&DMA_InitS&&&&u8&&&&&i&=&0;&&&&struct&DATA_BUF&*send_pk&=&&TXD_BUF[0];&&&&&&&&//初始化定义&&&&while&(DMA_GetFlagStatus(DMA1_FLAG_TC4)&==&RESET);&&//等待上一个数据帧发送完毕&&&&send_pk-&gtIP_addr&=&IP_ADDR;&&&&&&&&&&&&//设置发送从机的IP地址&&&&send_pk-&gtcommand&=&&&&&&&&&&&&&//设置反回发送命令,&&&&send_pk-&gtlength&=&Len&&&GET_LEN;&&&&//设置帧数据长度&&&&&&&&&&&&send_pk-&gtstate&&=&~GET_ERROR;&&&&&&&&//设置错误标志位,无&&&&&RS232_TxBuffer[0]&=&UART_START0;&&&&RS232_TxBuffer[1]&=&UART_START1;&&&&RS232_TxBuffer[2]&=&IP_ADDR;&&&&&&&&//设置发送从机的IP地址&&&&RS232_TxBuffer[3]&=&&&&&&&&&&&&&//设置反回发送命令,&&&&RS232_TxBuffer[4]&=&Len&&&GET_LEN;&&&&//设置帧数据长度&&&&for(i=0;i&ltLi++)&&&&{&&&&&&&&RS232_TxBuffer[i+5]&=&send_pk-&gtbyte;&&&&&&&&}&&&&&&&&RS232_TxBuffer[Len+5]&=&RS232_SetSum(send_pk);&&&&&&&&//计算校验和&&&&DMA_DeInit(DMA1_Channel4);&&&&&&DMA_InitStructure.DMA_PeripheralBaseAddr&=&USART1_DR_B&&&&DMA_InitStructure.DMA_MemoryBaseAddr&=&(u32)RS232_TxB&&&&DMA_InitStructure.DMA_DIR&=&DMA_DIR_PeripheralDST;&&&&DMA_InitStructure.DMA_BufferSize&=&Len+6;&&&&DMA_InitStructure.DMA_PeripheralInc&=&DMA_PeripheralInc_D&&&&DMA_InitStructure.DMA_MemoryInc&=&DMA_MemoryInc_E&&&&DMA_InitStructure.DMA_PeripheralDataSize&=&DMA_PeripheralDataSize_B&&&&DMA_InitStructure.DMA_MemoryDataSize&=&DMA_MemoryDataSize_B&&&&DMA_InitStructure.DMA_Mode&=&DMA_Mode_N&&&&DMA_InitStructure.DMA_Priority&=&DMA_Priority_VeryH&&&&DMA_InitStructure.DMA_M2M&=&DMA_M2M_D&&&&DMA_Init(DMA1_Channel4,&&DMA_InitStructure);&&&&USART_DMACmd(USART1,&USART_DMAReq_Tx,&ENABLE);&&&&&&DMA_ClearFlag(DMA1_FLAG_TC4);&&&&&&&&&&&&DMA_Cmd(DMA1_Channel4,&ENABLE);}
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
没有什么好办法,本质上第一次与随后的传输不一样
因为你的判断条件是“前次操作是否完成”,而第一次传输之前没有任何操作,当然这样的判断条件不成立了。唯一的办法是改变这个判断条件,但这意味着改变你的程序架构,需要你自己决定是否值得做这样的改变。也许一个简单的办法是:设置一个“前次操作完成”的软件标志,在初始化程序时把它设置为&真&,随后在每次传输之前判断并清除它,在监测到传输完成的硬件标记时设置这个软件标志。
EEWORLD 官方微信
Powered by

我要回帖

更多关于 检测目标单片机 的文章

 

随机推荐