完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
main文件中的代码
extern u16 RxDataValue_Temp ; extern u8 RxData_ValidNum ; extern u8 RXData[3]; //全局变量 完整数据包 extern unsigned char flagpacker; //全局变量 是否完整接收一个数据包 u8 TXData[3]={0x52,0xF6,0x09}; void main(void) { char Test = 0; All_Config(); enableInterrupts(); //使能全局中断 SimUART_SendByte(0x01 ); /* Infinite loop */ while (1) { SimUART_SendByte( Test++ ); if( flagpacker ==1 ) { for(u8 i=0;i<3;i++) { SimUART_SendByte( RXData[i] ); } flagpacker = 0; } } } user文件中的代码 #include "user.h" u16 SimUART_SendData = 0xFF; u8 SimUART_SendData_BitNum = 10; u8 RxData_ValidNum = 0; u8 RxDataNum=0; u8 RXData[3]; //全局变量 完整数据包 u16 RxDataValue=0x0000; u16 RxDataValue_Temp = 0x0000; void Clock_Config(void) { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); } void IO_Init() { //TXD:TXD位推挽输出 PD2 SimUART_PORT->ODR |= SimUART_PIN_TX; //0000 0100 SimUART_PORT->DDR |= SimUART_PIN_TX; //0000 0100 SimUART_PORT->CR1 |= SimUART_PIN_TX; //0000 0100 SimUART_PORT->CR2 = ~SimUART_PIN_TX; //0000 0100 //RXD:悬浮输入 高电平 PD3 SimUART_PORT->IDR |= SimUART_PIN_RX; //0000 1000 SimUART_PORT->DDR = ~SimUART_PIN_RX; //0000 1000 SimUART_PORT->CR1 = ~SimUART_PIN_RX; //0000 1000 SimUART_PORT->CR2 = ~SimUART_PIN_RX; //0000 1000 } void tiM2_Init() { CLK->PCKENR1 |= CLK_PCKENR1_TIM2; //使能 TIM2 TIM2->PSCR = 0x04; //16分频 1MHZ 1us TIM2->ARRH = ARRValue_9600 >> 8; //自动装载 每52us复位一次TIM2 TIM2->ARRL = ARRValue_9600; //每1us递减1 TIM2->CNTRH = 0; //定时器清零 TIM2->CNTRL = 0; TIM2->CR1 |= TIM2_CR1_CEN; //开启定时器 } //初始化中断 void Interrupt_Init() { //允许更新中断 //TIM2->CR1 = ~TIM2_CR1_UDIS; //允许更新 可以不管默认为0 TIM2->IER |= TIM2_IER_UIE; //更新中断使能 //IO口下降中断 初始化 //SimUART_PORT->CR2 |= 0x08; //使能外部中断 SimUART_PORT->CR2 |= 0x08; //使能外部中断 EXTI->CR1 = 0x80; //仅下降沿触发 //禁止比较中断 TIM2->IER = ~TIM2_IER_CC1IE; //禁止捕获/比较1 } void SimUART_SendByte(u8 SendData) { while( SimUART_SendData_BitNum < 10 ); //清 更新中断标志位 TIM2->SR1 = ~TIM2_SR1_UIF; //0000 0000 0000 0000 保证最低位(起始)为0,除数据位后全部为1 SimUART_SendData = ( ( SendData << 1 )| (0xFE00) ); SimUART_SendData_BitNum = 0; //开启更新中断 TIM2-> IER |= TIM2_IER_UIE; } //初始化函数 void All_Config( void ) { Clock_Config(); IO_Init(); TIM2_Init(); Interrupt_Init(); } 中断文件中的代码 extern u16 SimUART_SendData ; extern u8 SimUART_SendData_BitNum ; extern u8 RxData_ValidNum ; extern u8 RxDataNum; extern u16 RxDataValue ; extern u16 RxDataValue_Temp ; INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6) { //关闭IO中断 //SimUART_PORT->CR2 = ~0x08; SimUART_PORT->CR2 = ~0x08; //设置比较中断 TIM2-> CCMR1 = 0x00; //还是有问题 //TIM2-> CCR1H = 0; TIM2-> CCR1L = TIM2->CNTRL + ( ARRValue_9600/2 ); RxDataValue = 0x0000; //TIM2->CCER1 |= 0x00; TIM2->SR1 = ~TIM2_SR1_CC1IF; //清中断标志位 TIM2->IER |= TIM2_IER_CC1IE; //使能 捕获/比较中断1 } INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13) { // //第一步,清中断标志位 TIM2->SR1 = ~TIM2_SR1_UIF; //发送一个位 计数 SimUART_SendData_BitNum++; if( ((SimUART_SendData) 0X0001) ) //如果是高电平,发高电平 { SimUART_PORT->ODR |= SimUART_PIN_TX; } else //如果是低电平,发低电平 { SimUART_PORT->ODR = ~SimUART_PIN_TX; } //发送一个位 SimUART_SendData >>= 1; if( 10 <= SimUART_SendData_BitNum ) { TIM2-> IER = ~TIM2_IER_UIE; } } extern u8 RXData[3]; //全局变量 完整数据包 u8 RXData_end; //接受完数据 unsigned char flagpacker=0; //全局变量 是否完整接收一个数据包 INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14) { static unsigned char RxData1[255];//接收数据缓存区 static unsigned char count; //串口接收数据长度 //第一步,清中断标志位(防止始终进入中断) TIM2->SR1 = ~TIM2_SR1_CC1IF; //清中断标志位 RxDataNum++; if( SimUART_PIN_RX == (SimUART_PORT->IDR SimUART_PIN_RX ) )//其次,接收10个位 { RxDataValue |= ( 0x01 << (RxDataNum) );//该位 置1 } //第二步,读IO输入 //首先,判断是否接收了10个位 if(10 == RxDataNum) //如果是则 { RxDataNum = 0; TIM2->IER = ~TIM2_IER_CC1IE; //1、关 比较中断 //STM8S没有外中断标志位,STM8L有标志位,因此暂时不需要清中断标志位 SimUART_PORT->CR2 |= 0x08; //2、开 IO中断 //处理有效数据 if( (RxDataValue 0x0402) == 0x0400 ) { RxDataValue_Temp = ( RxDataValue >> 2 ); RxData_ValidNum++;//接收字有效 节数 RXData[count++] = RxDataValue_Temp; if(count>2) { for(unsigned char i = 0; i |
|
相关推荐
1个回答
|
|
你重点检查下管脚的映射情况。
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
419 浏览 0 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
448 浏览 1 评论
290 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
257 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
623 浏览 2 评论
1389浏览 9评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
86浏览 3评论
45浏览 3评论
STM32CUBEMX4.22.1在main函数里面添加一行语句就死机的原因?
58浏览 3评论
51浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-5 12:07 , Processed in 0.743045 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号