Перейти к содержанию

Int64

Members
  • Постов

    1
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Новосибирск

Электроника

  • Стаж в электронике
    1-2 года
  • Сфера радиоэлектроники
    Программист микроконтроллеров
  • Оборудование
    STM32, AVR

Достижения Int64

Новичок

Новичок (1/14)

  • Месяц на форуме
  • Год на форуме
  • Неделя на форуме

Последние значки

0

Репутация

  1. Всем привет, пытаюсь заставить общаться 2 микроконтроллера через UART, программа для atmega8 очень простая: #define BAUD 9600 #define BAUDRATE ((F_CPU)/(BAUD*16UL)-1) #include <avr/io.h> #include <util/delay.h> void uart_init (void) { UBRRH = (BAUDRATE >> 8); UBRRL = BAUDRATE; UCSRB = (1 << TXEN ) | (1 << RXEN); UCSRC = (1 << URSEL) | (1 << USBS) | (1 << UCSZ0) | (1 << UCSZ1); } void uart_transmit (uint8_t data) { while (!( UCSRA & (1 << UDRE))); UDR = data; } int main() { DDRC = 0xff; PORTC = 0x00; DDRB = 0xFF; PORTB = 0x00; DDRD = 0x00; PORTD = 0x00; uart_init(); while(1) { uart_transmit('1'); _delay_ms(100); } return 0; } На STM принимаю через UART2 (порт PA.3) вывожу через USB в терминал, за основу взял вот это: https://github.com/rowol/stm32_discovery_arm_gcc/tree/master/usb_cdc_vcp Принимать данные с клавиатуры принимает (через терминал) и символы распознает хорошо, помигал светодиодом на плате, но когда пытаюсь передать с atmega8 данные на stm32 получаю вместо символов вопросительные знаки... Что с этим делать не знаю, уже что только не пробовал. Пробовал конфигурацию которая автоматически создается как в примере выше, и пробовал сам конфигурировать: RCC_APB2PeriphClockCmd(DISCOVERY_COM_CLK, ENABLE); RCC_AHB1PeriphClockCmd(DISCOVERY_COM_RX_GPIO_CLK, ENABLE); GPIO_InitTypeDef gpio; USART_InitTypeDef usart; GPIO_StructInit(&gpio); gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_Pin = DISCOVERY_COM_TX_PIN; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &gpio); gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_Pin = DISCOVERY_COM_RX_PIN; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &gpio); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); USART_StructInit(&usart); usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; usart.USART_BaudRate = 9600; usart.USART_WordLength=USART_WordLength_8b; usart.USART_Parity=USART_Parity_No; usart.USART_StopBits = USART_StopBits_2; usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(DISCOVERY_COM, &usart); USART_ITConfig(DISCOVERY_COM, USART_IT_RXNE, ENABLE); USART_Cmd(DISCOVERY_COM, ENABLE); Когда сам конфигурирую вообще ничего не приходит, точнее приходит, но вопросительные знаки не рисуются, но свитодиод мигает, и говорит что данные приходят. Еще один момент, микроконтроллер atmega работает не от кварцевого резонатора, может быть из-за этого?
×
×
  • Создать...