完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
:
INTERRUPT_HANDLER(I2C_IRQHandler,19)和。使用外部设备(验证工作),我生成一个I2C信号(100KHz)与程序作为接收器进行通信。 我已经读出所有I2C寄存器,以确保所有寄存器都已正确配置。 ,SCL和SDA线上拉至5v(用示波器验证)。 ,我正在使用由STM提供的修改的I2C示例代码: http://www.st.com/en/embedded-software/stsw-stm8069.html 颂歌 &amp; sharpinclude''stm8s.h'' &amp; sharpinclude''stm8s_clk.h'' &amp; sharpinclude''stm8s_i2c.h'' &amp; sharpinclude''stm8s_gpio.h'' &amp; sharpinclude''stm8s_it.h''void main(void){ // ************************************** 时钟设置(16 MHz内部时钟+ I2C外设时钟) CLK_DeInit(); CLK_HSECmd(DISABLE); CLK_LSICmd(DISABLE); CLK_ClockSwitchCmd(DISABLE); CLK_HSICmd(ENABLE); while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY)== FALSE); CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI,DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C,ENABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC,DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU,DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1,DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_tiMER1,DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2,DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4,DISABLE); // ************************************** GPIO设置 GPIO_DeInit(GPIOB); GPIO_Init(GPIOB,GPIO_PIN_4,GPIO_MODE_OUT_OD_HIZ_FAST); GPIO_Init(GPIOB,GPIO_PIN_5,GPIO_MODE_OUT_OD_HIZ_FAST); // ************************************** I2C设置(100KHz,7位地址模式,所有I2C中断使能,地址:0x24) I2C_DeInit(); I2C_Init(100000, (0X24&LT;&。1), I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, (CLK_GetClockFreq()/ 1000000)); I2C_Cmd(ENABLE); I2C_ITConfig((I2C_IT_TypeDef)(I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF),ENABLE); // ***********************************************启用一般中断 enableInterrupts();而(1); } //摘自文件''stm8s_it.c'' INTERRUPT_HANDLER(I2C_IRQHandler,19) { / *读取SR2寄存器以获取I2C错误* / if((I2C-> SR2)!= 0) { / *清除SR2寄存器* / I2C-&gt; SR2 = 0; / *设置LED2 * / // STM_EVAL_LEDOn(LED2);} Event = I2C_GetLastEvent(); 开关(事件) { / *******奴隶发射器****** / / *检查EV1 * / case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED: Tx_Idx = 0; 休息; / *检查EV3 * / case I2C_EVENT_SLAVE_BYTE_TRANSMITTING: / *传输数据* / I2C_SendData(Slave_Buffer_Rx [Tx_Idx ++]); 打破; / *******奴隶接收者********** / / *检查EV1 * / case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED: 休息; / *检查EV2 * / case I2C_EVENT_SLAVE_BYTE_RECEIVED: Slave_Buffer_Rx [Rx_Idx ++] = I2C_ReceiveData(); 休息; / *检查EV4 * / case(I2C_EVENT_SLAVE_STOP_DETECTED): / *写入CR2以清除STOPF标志* / I2C-&gt; CR2 | = I2C_CR2_ACK; 打破;默认: 打破; }} #I2C-外设的-stm8s005c6 - 不工作 以上来自于谷歌翻译 以下为原文 : INTERRUPT_HANDLER(I2C_IRQHandler, 19)and . Using an external device (verified to be working), I generate an I2C signal (100KHz) to communicate with program as a receiver with the . I have read out all the I2C registers to ensure all registers are properly configured. , SCL and SDA line is pulled up to 5v (verified with an oscilloscope). , I am using the I2C example code with modifications provided by STM : http://www.st.com/en/embedded-software/stsw-stm8069.html ode Below &sharpinclude ''stm8s.h'' &sharpinclude ''stm8s_clk.h'' &sharpinclude ''stm8s_i2c.h'' &sharpinclude ''stm8s_gpio.h'' &sharpinclude ''stm8s_it.h''void main(void){ // ************************************** Clock setup (16 MHz Internal clock + I2C peripheral clock) CLK_DeInit();CLK_HSECmd(DISABLE); CLK_LSICmd(DISABLE); CLK_ClockSwitchCmd(DISABLE); CLK_HSICmd(ENABLE);while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == FALSE); CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, DISABLE);//**************************************GPIO setup GPIO_DeInit(GPIOB); GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_OD_HIZ_FAST); GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_OD_HIZ_FAST);// ************************************** I2C setup (100KHz, 7 bit address mode, all I2C interrupt enable, address: 0x24) I2C_DeInit(); I2C_Init(100000, (0x24<<1), I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, (CLK_GetClockFreq() / 1000000)); I2C_Cmd(ENABLE);I2C_ITConfig((I2C_IT_TypeDef)(I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE); // ***********************************************Enable general interrupts enableInterrupts();while(1); } // Excerpt from file ''stm8s_it.c'' INTERRUPT_HANDLER(I2C_IRQHandler, 19) { /* Read SR2 register to get I2C error */ if ((I2C->SR2) != 0) { /* Clears SR2 register */ I2C->SR2 = 0;/* Set LED2 */ //STM_EVAL_LEDOn(LED2);} Event = I2C_GetLastEvent(); switch (Event) { /******* Slave transmitter ******/ /* check on EV1 */ case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED: Tx_Idx = 0; break;/* check on EV3 */ case I2C_EVENT_SLAVE_BYTE_TRANSMITTING: /* Transmit data */ I2C_SendData(Slave_Buffer_Rx[Tx_Idx++]); break; /******* Slave receiver **********/ /* check on EV1*/ case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED: break;/* Check on EV2*/ case I2C_EVENT_SLAVE_BYTE_RECEIVED: Slave_Buffer_Rx[Rx_Idx++] = I2C_ReceiveData(); break;/* Check on EV4 */ case (I2C_EVENT_SLAVE_STOP_DETECTED): /* write to CR2 to clear STOPF flag */ I2C->CR2 |= I2C_CR2_ACK; break;default: break; }} #i2c-peripheral-of-stm8s005c6-not-working |
|
相关推荐
2个回答
|
|
|
AFR6位使能&amp; sharpPB5 /&amp; sharpPB4端口引脚上的备用功能(I2C)
以上来自于谷歌翻译 以下为原文 The AFR6 bit enables the alternate function (I2C) on the &sharpPB5/&sharpPB4 port pin |
|
|
|
|
|
嗨佛朗哥,
不,我没有启用备用功能选项字节。启用后,I2C中断工作。 非常感谢。 达里尔 以上来自于谷歌翻译 以下为原文 Hi Franco, No, I did not enable the alternate function option byte. After enabling it, I2C interrupt works. Thanks a lot. Darryl |
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1453 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1502 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3649 浏览 1 评论
3842 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2461 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
727浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
663浏览 5评论
710浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
941浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
745浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 07:16 , Processed in 0.636977 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2498