完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好!
我用一颗STM8S003 的芯片连接一个串口的WIFI 模块, 我想使能STM8 串口接收中断。 具体做法如下: 1. 初始化 时钟和串口: void main() { My_CLK_Config(); // 初始化时钟 disableInterrupts(); // 关闭中断 UART1_DeInit(); //复位UART1 UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D,UART1_STOPBITS_1, UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); // 配置串口 UART1_ITConfig(UART1_IT_RXNE,ENABLE); //配置串口1的接收中断 enableInterrupts(); // 开启中断 while (1) { } } 2. 设置中断向量 表: extern void _stext(); /* startup routine */ extern @far @interrupt void UART1_RX_IRQHandler(void); extern @far @interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void); extern @far @interrupt void EXTI_PORTD_IRQHandler(void); extern @far @interrupt void EXTI_PORTC_IRQHandler(void); struct interrupt_vector const _vectab[] = { {0x82, (interrupt_handler_t)_stext}, /* reset */ {0x82, NonHandledInterrupt}, /* trap */ {0x82, NonHandledInterrupt}, /* irq0 */ {0x82, NonHandledInterrupt}, /* irq1 */ {0x82, NonHandledInterrupt}, /* irq2 */ {0x82, NonHandledInterrupt}, /* irq3 */ {0x82, NonHandledInterrupt}, /* irq4 */ {0x82, (interrupt_handler_t)EXTI_PORTC_IRQHandler}, /* irq5 */ {0x82, (interrupt_handler_t)EXTI_PORTD_IRQHandler}, /* irq6 */ {0x82, NonHandledInterrupt}, /* irq7 */ {0x82, NonHandledInterrupt}, /* irq8 */ {0x82, NonHandledInterrupt}, /* irq9 */ {0x82, NonHandledInterrupt}, /* irq10 */ {0x82, NonHandledInterrupt}, /* irq11 */ {0x82, NonHandledInterrupt}, /* irq12 */ {0x82, (interrupt_handler_t)TIM2_UPD_OVF_BRK_IRQHandler}, /* irq13 */ {0x82, NonHandledInterrupt}, /* irq14 */ {0x82, NonHandledInterrupt}, /* irq15 */ {0x82, NonHandledInterrupt}, /* irq16 */ {0x82, NonHandledInterrupt}, /* irq17 */ {0x82, (interrupt_handler_t)UART1_RX_IRQHandler}, /* irq18 */ 完成以上操作后, 我在main 文件中 串口中断 入口 打了断点: 但是电脑串口发送数据到STM8,断点没有停止。 请问以上设置有没有遗漏的? @far @interrupt void UART1_RX_IRQHandler(void) { if(UART1->SR UART1_FLAG_RXNE) { rxbuf[rx_num++]=UART1_ReceiveData8(); UART1_SendData8(UART1_ReceiveData8()); } } |
|
相关推荐
1个回答
|
|
大家好!根据您的描述,您想要使用STM8S003芯片与一个串口WIFI模块通信,并使能STM8串口接收中断。以下是详细的步骤:
1. 初始化时钟和串口: ```c void main(){ My_CLK_Config(); // 初始化时钟 disableInterrupts(); // 关闭中断 CLK_PeripheralClockConfig(CLK_Peripheral_UART1, ENABLE); // 使能UART1时钟 UART1_DeInit(); // 复位UART1 UART1_Init((uint32_t)115200, UART1_WordLength_8D, UART1_StopBits_1, UART1_Parity_No); } ``` 2. 配置串口接收中断: ```c void UART1_Config(void) { UART1_ITConfig(UART1_IT_RXNE, ENABLE); // 使能接收中断 UART1_Cmd(ENABLE); // 使能UART1 enableInterrupts(); // 使能中断 } ``` 3. 在主函数中调用配置函数: ```c void main() { // ...(之前的初始化代码) UART1_Config(); // 配置串口接收中断 // ...(其他代码) } ``` 4. 实现串口接收中断服务程序: ```c void UART1_IRQHandler(void) interrupt 4 using 1 { if (UART1_GetFlagStatus(UART1_FLAG_RXNE) != RESET) { uint8_t data = UART1_ReceiveData8(); // 读取接收到的数据 // 处理接收到的数据 UART1_ClearFlag(UART1_FLAG_RXNE); // 清除接收中断标志 } } ``` 5. 在您的代码中,处理接收到的数据。例如,您可以将数据存储在一个数组中,或者根据数据执行特定的操作。 请注意,您可能需要根据您的具体需求调整时钟配置、波特率等参数。希望这些步骤对您有所帮助! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1801 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1096 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
735 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1684 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
745浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
578浏览 3评论
601浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
565浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 09:56 , Processed in 0.800114 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号