-
APM32F107串口中断接收丢包
[color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]APM32F107在串口同时发送和接收的情况下串口接收丢字节,具体表现为偶发进入串口接收中断了,但是USART_FLAG_RXBNE标志位没有触发,导致读不到这个字节进而丢字节,通过计数发现进入中断的次数与实际应该收到的字节数一致。1、发送是阻塞式发送的,没有用发送中断,排除进入的是发送中断的可能。[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]2、出现这种情况时打断点看了,其他的溢出及错误标志位并没有置位,也打印检查了,没有置位。[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]3、排查代码了没有在其他地方主动调用USART_RxDatad读取。[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]4、串口中断优先级已调至最高。[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]5、只接收不发送不会丢字节,挂一晚上都不丢,只要一发送接收就会丢。[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]发送代码:[/size][/font][/backcolor][/color] [color=rgb(68, 85, 136)][font=Tahoma, "][size=16px][b]void[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(153, 0, 0)][font=Tahoma, "][size=16px][b]Uart1_Send[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]([/size][/font][/backcolor][/color][color=rgb(68, 85, 136)][font=Tahoma, "][size=16px][b]char[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] buf)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]{[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(68, 85, 136)][font=Tahoma, "][size=16px][b]uint16_t[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] data_9th = buf;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] dog_feed_count_clean(); [/size][/font][/backcolor][/color][color=rgb(136, 136, 136)][font=Tahoma, "][size=16px]// 循环清除喂狗变量,超过DOG_PROTECT_TIME_100MS不清除则认为主循环异常,并停止喂狗。[/size][/font][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(0, 0, 0)][font=Tahoma, "][size=16px][b]if[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] (g_rParameters.sPort[[/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]0[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]].ucParity == UART_CHK_MARK)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] data_9th |= ([/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]1[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] << (uart1_data_bit - [/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]1[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]));[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(0, 0, 0)][font=Tahoma, "][size=16px][b]else[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(0, 0, 0)][font=Tahoma, "][size=16px][b]if[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] (g_rParameters.sPort[[/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]0[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]].ucParity == UART_CHK_SPACE)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] data_9th &= ~([/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]1[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] << (uart1_data_bit - [/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]1[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]));[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] WAIT_TX_EMPTY; [/size][/font][/backcolor][/color][color=rgb(136, 136, 136)][font=Tahoma, "][size=16px]// wait data register empty//等待发送完[/size][/font][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] USART_TxData(USART1, data_9th);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]接收中断:[/size][/font][/backcolor][/color] [color=rgb(68, 85, 136)][font=Tahoma, "][size=16px][b]void[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(153, 0, 0)][font=Tahoma, "][size=16px][b]USART1_IRQHandler[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]([/size][/font][/backcolor][/color][color=rgb(68, 85, 136)][font=Tahoma, "][size=16px][b]void[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px])[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]{[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(68, 85, 136)][font=Tahoma, "][size=16px][b]uint8_t[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] data;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(68, 85, 136)][font=Tahoma, "][size=16px][b]uint8_t[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] longth = g_sParameters.sPort[[/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]0[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]].ucDataSize;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(0, 0, 0)][font=Tahoma, "][size=16px][b]if[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] (USART_ReadStatusFlag(USART1, USART_FLAG_OVRE) == SET)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(136, 136, 136)][font=Tahoma, "][size=16px]// 由软件清0,先读取USART_STS寄存器,再读USART_DATA寄存器完成清0。[/size][/font][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] USART_RxData(USART1);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(0, 0, 0)][font=Tahoma, "][size=16px][b]if[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] (USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == SET)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] data = ([/size][/font][/backcolor][/color][color=rgb(68, 85, 136)][font=Tahoma, "][size=16px][b]uint8_t[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px])USART_RxData(USART1); [/size][/font][/backcolor][/color][color=rgb(136, 136, 136)][font=Tahoma, "][size=16px]// fetch recv data from buffer[/size][/font][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(0, 0, 0)][font=Tahoma, "][size=16px][b]if[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] (g_sParameters.sPort[[/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]0[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]].ucParity != UART_CHK_NONE)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] data = data & (~([/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]1[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] << longth)); [/size][/font][/backcolor][/color][color=rgb(136, 136, 136)][font=Tahoma, "][size=16px]// 去掉校验位[/size][/font][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(0, 0, 0)][font=Tahoma, "][size=16px][b]if[/b][/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] (AtCmd_enter_mode([/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]0[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px], data) == [/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]1[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px])[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] packet_count = [/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]0[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px];[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(0, 0, 0)][font=Tahoma, "][size=16px][b]else[/b][/size][/font][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] packet_count = [/size][/font][/backcolor][/color][color=rgb(0, 153, 153)][font=Tahoma, "][size=16px]0[/size][/font][/color][color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px];[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] uart1_rx_ringbuf_push(&uart1_rx_ringbuf, data);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color][color=rgb(136, 136, 136)][font=Tahoma, "][size=16px]// uart_rec_len ++;[/size][/font][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] usart_recv_total_len++;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px] timer_pack_reset_func();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color]
1517浏览量 22回复量 关注量 -
APM32F107的串口接收中断丢字节问题 sos
[i=s] 本帖最后由 xiaoqilo 于 2025-4-23 16:53 编辑 [/i] APM32F107在串口同时发送和接收的情况下串口接收丢字节,具体表现为偶发进入串口接收中断了,但是USART_FLAG_RXBNE标志位没有触发,导致读不到这个字节进而丢字节,通过计数发现进入中断的次数与实际应该收到的字节数一致。1、发送是阻塞式发送的,没有用发送中断,排除进入的是发送中断的可能。 2、出现这种情况时打断点看了,其他的溢出及错误标志位并没有置位,也打印检查了,没有置位。 3、排查代码了没有在其他地方主动调用USART_RxDatad读取。 4、串口中断优先级已调至最高。 5、只接收不发送不会丢字节,挂一晚上都不丢,只要一发送接收就会丢。 发送代码: [color=rgb(68, 85, 136)][b]void[/b][/color] [color=rgb(153, 0, 0)][b]Uart1_Send[/b][/color]([color=rgb(68, 85, 136)][b]char[/b][/color] buf) { [color=rgb(68, 85, 136)][b]uint16_t[/b][/color] data_9th = buf; dog_feed_count_clean(); [color=rgb(136, 136, 136)]// 循环清除喂狗变量,超过DOG_PROTECT_TIME_100MS不清除则认为主循环异常,并停止喂狗。[/color] [color=rgb(0, 0, 0)][b]if[/b][/color] (g_rParameters.sPort[[color=rgb(0, 153, 153)]0[/color]].ucParity == UART_CHK_MARK) { data_9th |= ([color=rgb(0, 153, 153)]1[/color] << (uart1_data_bit - [color=rgb(0, 153, 153)]1[/color])); } [color=rgb(0, 0, 0)][b]else[/b][/color] [color=rgb(0, 0, 0)][b]if[/b][/color] (g_rParameters.sPort[[color=rgb(0, 153, 153)]0[/color]].ucParity == UART_CHK_SPACE) { data_9th &= ~([color=rgb(0, 153, 153)]1[/color] << (uart1_data_bit - [color=rgb(0, 153, 153)]1[/color])); } WAIT_TX_EMPTY; [color=rgb(136, 136, 136)]// wait data register empty//等待发送完[/color] USART_TxData(USART1, data_9th); } 接收中断: [color=rgb(68, 85, 136)][b]void[/b][/color] [color=rgb(153, 0, 0)][b]USART1_IRQHandler[/b][/color]([color=rgb(68, 85, 136)][b]void[/b][/color]) { [color=rgb(68, 85, 136)][b]uint8_t[/b][/color] data; [color=rgb(68, 85, 136)][b]uint8_t[/b][/color] longth = g_sParameters.sPort[[color=rgb(0, 153, 153)]0[/color]].ucDataSize; [color=rgb(0, 0, 0)][b]if[/b][/color] (USART_ReadStatusFlag(USART1, USART_FLAG_OVRE) == SET) { [color=rgb(136, 136, 136)]// 由软件清0,先读取USART_STS寄存器,再读USART_DATA寄存器完成清0。[/color] USART_RxData(USART1); } [color=rgb(0, 0, 0)][b]if[/b][/color] (USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == SET) { data = ([color=rgb(68, 85, 136)][b]uint8_t[/b][/color])USART_RxData(USART1); [color=rgb(136, 136, 136)]// fetch recv data from buffer[/color] [color=rgb(0, 0, 0)][b]if[/b][/color] (g_sParameters.sPort[[color=rgb(0, 153, 153)]0[/color]].ucParity != UART_CHK_NONE) { data = data & (~([color=rgb(0, 153, 153)]1[/color] << longth)); [color=rgb(136, 136, 136)]// 去掉校验位[/color] } [color=rgb(0, 0, 0)][b]if[/b][/color] (AtCmd_enter_mode([color=rgb(0, 153, 153)]0[/color], data) == [color=rgb(0, 153, 153)]1[/color]) { packet_count = [color=rgb(0, 153, 153)]0[/color]; } [color=rgb(0, 0, 0)][b]else[/b][/color] { packet_count = [color=rgb(0, 153, 153)]0[/color]; uart1_rx_ringbuf_push(&uart1_rx_ringbuf, data); [color=rgb(136, 136, 136)]// uart_rec_len ++;[/color] } usart_recv_total_len++; } timer_pack_reset_func(); }
972浏览量 0回复量 关注量 -
有没有APM32F107RC以太网问题
开发板用的的是PD8、PD9、PD10复用引脚,我板子上用的是PA7、PC4、PC5不管怎么调就是不好使,确认PHY正常运行通过MDIO可以读取到PHY状态,以下是初始化代码:[color=#cccccc][backcolor=rgb(31, 31, 31)][font=Consolas, "][color=#569cd6]void[/color] [color=#dcdcaa]Ethernet_GPIOConfig[/color]([color=#569cd6]void[/color]) { [color=#4ec9b0]GPIO_Config_T[/color] [color=#9cdcfe]configStruct[/color]; [color=#6a9955] /*[/color] [color=#6a9955] * ETH_RESET# PB15[/color] [color=#6a9955] * ETH_INT PB14[/color] [color=#6a9955] * ETH_MDIO PA2[/color] [color=#6a9955] * ETH_MDC PC1[/color] [color=#6a9955] * ETH_MCO PA8[/color] [color=#6a9955] */[/color] [color=#6a9955] /* Enable GPIOs clocks */[/color] [color=#dcdcaa]RCM_EnableAPB2PeriphClock[/color]([color=#569cd6]ETH_MDC_GPIO_CLK[/color] [color=#d4d4d4]|[/color] [color=#569cd6]ETH_MDIO_GPIO_CLK[/color] [color=#d4d4d4]|[/color] [color=#569cd6]ETH_RESET_GPIO_CLK[/color] [color=#d4d4d4]|[/color] [color=#569cd6]ETH_INT_GPIO_CLK[/color] [color=#d4d4d4]|[/color] [color=#569cd6]ETH_MCO_GPIO_CLK[/color]); [color=#6a9955] /* Enable SYSCFG clock */[/color] [color=#dcdcaa]RCM_EnableAPB2PeriphClock[/color](RCM_APB2_PERIPH_AFIO); [color=#6a9955] /* Configure ETH_RESET# */[/color] [color=#dcdcaa]GPIO_ConfigStructInit[/color]([color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] [color=#569cd6]ETH_INT_PIN[/color]; [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]speed[/color] [color=#d4d4d4]=[/color] [color=#4fc1ff]GPIO_SPEED_50MHz[/color]; [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]mode[/color] [color=#d4d4d4]=[/color] [color=#4fc1ff]GPIO_MODE_OUT_PP[/color]; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]ETH_RESET_PORT[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#6a9955] /* Configure ETH_MII_INT */[/color] [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] [color=#569cd6]ETH_INT_PIN[/color]; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]ETH_INT_PORT[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#569cd6]ETH_INT_PIN_HIGH[/color](); [color=#6a9955] /* Configure ETH_MDC */[/color] [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] [color=#569cd6]ETH_MDC_PIN[/color]; [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]mode[/color] [color=#d4d4d4]=[/color] [color=#4fc1ff]GPIO_MODE_AF_PP[/color]; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]ETH_MDC_PORT[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#6a9955] /* Configure ETH_MDIO */[/color] [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] [color=#569cd6]ETH_MDIO_PIN[/color]; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]ETH_MDIO_PORT[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#6a9955] /* RESET ETH PHY */[/color] [color=#569cd6]ETH_RESET_PIN_LOW[/color](); [color=#dcdcaa]Ethernet_ResetDelay[/color]([color=#569cd6]DP83848_RESET_DELAY[/color]); [color=#569cd6]ETH_RESET_PIN_HIGH[/color](); [color=#dcdcaa]Ethernet_ResetDelay[/color]([color=#569cd6]DP83848_RESET_DELAY[/color]); [color=#6a9955] /* Configure PB10 ,PB11 ,PB12 ,PB13 as alternate function push-pull */[/color] [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] GPIO_PIN_11 [color=#d4d4d4]|[/color] GPIO_PIN_12 [color=#d4d4d4]|[/color] GPIO_PIN_13; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]GPIOB[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#6a9955] /*[/color] [color=#6a9955] * ETH_RMII_REF_CLK PA1[/color] [color=#6a9955] * ETH_RMII_CRS_DV PD8->PA7[/color] [color=#6a9955] * ETH_RMII_RXD0 PD9->PC4[/color] [color=#6a9955] * ETH_RMII_RXD1 PD10->PC5[/color] [color=#6a9955] * ETH_RMII_TX_EN PB11[/color] [color=#6a9955] * ETH_RMII_TXD0 PB12[/color] [color=#6a9955] * ETH_RMII_TXD1 PB13[/color] [color=#6a9955] */[/color] [color=#6a9955] /* Enable GPIOs clocks */[/color] [color=#dcdcaa]RCM_EnableAPB2PeriphClock[/color](RCM_APB2_PERIPH_GPIOA [color=#d4d4d4]|[/color] RCM_APB2_PERIPH_GPIOB [color=#d4d4d4]|[/color] RCM_APB2_PERIPH_GPIOC [color=#d4d4d4]|[/color] RCM_APB2_PERIPH_GPIOD); [color=#6a9955] /* ETHERNET pins remapp in APM32107-MINI board: RX_DV and RxD[3:0] */[/color] [color=#6a9955]//GPIO_ConfigPinRemap(GPIO_REMAP_ETH_MAC);[/color] [color=#6a9955] /* Configure PA1 and PA3 as input */[/color] [color=#dcdcaa]GPIO_ConfigStructInit[/color]([color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] GPIO_PIN_1; [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]mode[/color] [color=#d4d4d4]=[/color] [color=#4fc1ff]GPIO_MODE_IN_FLOATING[/color]; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]GPIOA[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#6a9955] /* Configure PA7, PC4, PC5 as input */[/color] [color=#dcdcaa]GPIO_ConfigStructInit[/color]([color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] GPIO_PIN_7; [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]mode[/color] [color=#d4d4d4]=[/color] [color=#4fc1ff]GPIO_MODE_IN_FLOATING[/color]; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]GPIOA[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#dcdcaa]GPIO_ConfigStructInit[/color]([color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] GPIO_PIN_4; [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]mode[/color] [color=#d4d4d4]=[/color] [color=#4fc1ff]GPIO_MODE_IN_FLOATING[/color]; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]GPIOC[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#dcdcaa]GPIO_ConfigStructInit[/color]([color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] GPIO_PIN_5; [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]mode[/color] [color=#d4d4d4]=[/color] [color=#4fc1ff]GPIO_MODE_IN_FLOATING[/color]; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]GPIOC[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#6a9955] /* ETH and CAN shared PB8, RMII Mode PB8 Must be output low */[/color] [color=#dcdcaa]GPIO_ConfigStructInit[/color]([color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]pin[/color] [color=#d4d4d4]=[/color] GPIO_PIN_8; [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]mode[/color] [color=#d4d4d4]=[/color] [color=#4fc1ff]GPIO_MODE_OUT_PP[/color]; [color=#9cdcfe]configStruct[/color].[color=#9cdcfe]speed[/color] [color=#d4d4d4]=[/color] [color=#4fc1ff]GPIO_SPEED_50MHz[/color]; [color=#dcdcaa]GPIO_Config[/color]([color=#569cd6]GPIOB[/color], [color=#d4d4d4]&[/color][color=#9cdcfe]configStruct[/color]); [color=#dcdcaa]GPIO_ResetBit[/color]([color=#569cd6]GPIOB[/color], GPIO_PIN_8); [color=#dcdcaa]GPIO_ConfigPinRemap[/color](GPIO_REMAP_MACEISEL_RMII); } [/font][/backcolor][/color]
788浏览量 4回复量 关注量