
本来刚接触STM8 单片机使用的是STM8S103F3P6,想法为想实现两单片机的串口通讯,主机发0x01 从机接如果收到0x01亮1指示灯,如果接收不是0x01亮另一指示灯,接收用中断,可两指示灯都没亮啊,根本没进中断,大侠们帮我看看是不是哪里配置有问题。 1)硬件很简单 主:TX-从RX 主:RX-从:TX 中间接一1K电阻,TX RX分别接有5.1K上拉电阻,5V供电 2)发送程序如下: #include "iostm8s103f3.h" /************************************/ /***************宏定义***************/ /************************************/ #define ON 1 #define OFF 0 #define POWER_LED (PD_ODR_ODR3) //电源显示 PD3 #define HIGHF_LED (PA_ODR_ODR3) //强风显示 PA3 #define BAOC_LED (PA_ODR_ODR1) //爆炒显示 PA1 #define LOWF_LED (PC_ODR_ODR5) //低风显示 PC5 #define LIGHT_LED (PC_ODR_ODR4) //照明显示 Pc4 /************************************/ /*************系统初始化*************/ /************************************/ void Sysinit(void) { PA_DDR = 0xff; //输出模式 PA_ODR = 0xff; //输出1 PA_CR2 = 0x00; //输出 2MHZ PA_CR1 = 0xff; //推挽输出 PB_DDR = 0xff; //输出模式 PB_ODR = 0xff; //输出1 PB_CR2 = 0x00; //输出 2MHZ PB_CR1 = 0xff; //推挽输出 PC_DDR = 0xff; //PC4输入 AD口 PC_ODR = 0xff; //PC4输出0 其他输出1 PC5 FTC334C电源初值为1 PC_CR2 = 0x00; //输出 2MHZ PC_CR1 = 0xff; //推挽输出 PC4浮空输入 //PD_DDR = 0xff; //PD1 2 3 4 5 6 7输出模式 //PD_ODR = 0xff; //PD1 2 3 4 5 6 7输出1 // PD_CR2 = 0x00; //输出 2MHZ //PD_CR1 = 0xdf; //PD5 Tx开漏输出 CLK_ICKR = 0x01; //bit 0开HSI时钟 while(!CLK_ICKR_HSIRDY) ; //等待HSI时钟准备就绪 CLK_ECKR = 0x00; //外部时钟关 CLK_CKDIVR = 0x18; //bit4-3 00:HSI/1 01:HSI/2 10:HSI/4 11:HSI/8 Tcpu=HSI/8=2MHZ CLK_PCKENR1 = 0x00; //开TIM4时钟 其他外设时钟关 CLK_PCKENR2 = 0x00; //bit2 BEEP } //串口初始化函数 void USART_Init(void) { PD_DDR &= ~(1<<5); PD_CR1 |= (1<<5); PD_ODR |= (1<<5); PD_DDR &= ~(1<<6); PD_CR1 |= (1<<6); PD_ODR |= (1<<6); CLK_PCKENR1|= 0x04; //开启串口时钟 UART1_CR2 |= 0x00; //发送禁止 UART1_CR1 = 0x00; //8位数据 不用奇偶校验 UART1_CR3 = 0x00; //1位停止位 不开启同步模式 UART1_BRR2 = 0x00; //9600 @2MHZ UART1_BRR1 = 0x0d; //9600 @2MHZ UART1_CR2 |= 0x08; //开启发送使能 } void Send_Date(uint8_t date) { while(!(UART1_SR&0x80)) ; //等待发送数据寄存器空 UART1_DR = date; while(!(UART1_SR&0x40)) ; //等待发送完成 } void main(void) { Sysinit(); USART_Init(); Send_Date(0x01); //if(UART1_SR & 0x80) {HIGHF_LED = 0;} while(1) ; } 3)接收程序如下: #include "iostm8s103f3.h" /************************************/ /***************宏定义***************/ /************************************/ #define ON 1 #define OFF 0 #define POWER_LED (PD_ODR_ODR3) //电源显示 PD3 #define HIGHF_LED (PA_ODR_ODR3) //强风显示 PA3 #define LOWF_LED (PC_ODR_ODR5) //低风显示 PC5 #define LIGHT_LED (PC_ODR_ODR4) //照明显示 Pc4 uint8_t temp; /************************************/ /*************系统初始化*************/ /************************************/ void Sysinit(void) { PA_DDR = 0xff; //输出模式 PA_ODR = 0xff; //输出1 PA_CR2 = 0x00; //输出 2MHZ PA_CR1 = 0xff; //推挽输出 PB_DDR = 0xff; //输出模式 PB_ODR = 0xff; //输出1 PB_CR2 = 0x00; //输出 2MHZ PB_CR1 = 0xff; //推挽输出 PC_DDR = 0xff; //PC4输入 AD口 PC_ODR = 0xff; //PC4输出0 其他输出1 PC5 FTC334C电源初值为1 PC_CR2 = 0x00; //输出 2MHZ PD6禁止外部中断 PC_CR1 = 0xff; //推挽输出 PD6带上拉电阻输入 //PD_DDR = 0xbf; //PD6 输入模式 Rx 引脚 //PD_ODR = 0xff; //PD1 2 3 4 5 6 7输出1 // PD_CR2 = 0x00; //输出 2MHZ //PD_CR1 = 0xff; //推挽输出 CLK_ICKR = 0x01; //bit 0开HSI时钟 while(!CLK_ICKR_HSIRDY) ; //等待HSI时钟准备就绪 CLK_ECKR = 0x00; //外部时钟关 CLK_CKDIVR = 0x18; //bit4-3 00:HSI/1 01:HSI/2 10:HSI/4 11:HSI/8 Tcpu=HSI/8=2MHZ CLK_PCKENR1 = 0xff; //开TIM4时钟 其他外设时钟关 CLK_PCKENR2 = 0xff; //bit2 BEEP } void Delay_us(uint16_t us) { while(us--) ; } void Delay_ms(uint16_t ms) { uint16_t i; while(ms--) { for(i=0;i<1420;i++) { ; } } } //串口初始化函数 void USART_Init(void) { //CLK_PCKENR1|= 0x04; //开启串口时钟 PD_DDR &= ~(1<<5); PD_CR1 |= (1<<5); PD_ODR |= (1<<5); PD_DDR &= ~(1<<6); PD_CR1 |= (1<<6); PD_ODR |= (1<<6); UART1_CR1 = 0x00; //8位数据 不用奇偶校验 UART1_CR3 = 0x00; //1位停止位 不开启同步模式 UART1_BRR2 = 0x00; //9600 @2MHZ UART1_BRR1 = 0x0d; //9600 @2MHZ UART1_CR2 = 0x24; //接收中断使能 开启接收使能 asm("rim") ; //允许CPU全局中断 STVD中为_asm("rim"); 开全局中断 } #pragma vector=UART1_R_RXNE_vector __interrupt void UART1_R_RXNE_vector_IRQHandler(void) { temp = UART1_DR; if(temp == 0x01) {HIGHF_LED = 0;} else {LOWF_LED = 0;} } void main(void) { Sysinit(); USART_Init(); // LIGHT_LED = 0; while(1) ; } |
程序卡死在vPortFree函数中
STM8AF6213 LIN通讯问题
STM32H7B0 CAN发送异常
STM32H750如何搭配88E6320來使用?
硬件的spi单线传输怎么读写寄存器。
STM8AF6266 LIN通讯实例
STM32L4R9最大支持SD卡的容量是?支持SDXC 64G卡吗?
有使用过芯讯通的A7680C这个4G模块吗?
ST60系列可以使用OFDM调制进行发射接收吗?
STM32F103的LIN Break问题
IAR仿真不太会用,有类似的资料没??有的话发我一份!!谢谢!!
不是开发板,是自己动手弄得两块板子,没用232芯片和PL2303芯片.............
IAR的资料很多
usb转ttl线搞根,先一个个单独调吧,实在不行,先试试楼上的方法,验证硬件有没有问题
好的,谢谢!!我试试...........