народ,, подскажите, что-то я в ступоре есть 2 stm32f103 настроен uart2, прерывания по приему байта есть обмен void sone_func(void){ //что-то делаем //хотим отправить команду по уарту другому мк //заполняем массив команды memset(UART_command,1,sizeof(UART_command)); //для дебага UART_command[0] = 1 UART_Send_Connamd(); //ждем в цикле 10мс и если ничего не прилетело то ошибка } void UART_Send_Connamd(void){ uint8_t i; //очищаем переменные отвечающие за ответ на комманду memset(UART_buff,0,sizeof(UART_buff)); UART_result_length = 0; UART_result_current_byte = 0; //говорим что ждем ответа UART_state = UART_WAIT_ANSWER; //отправляем for(i=0;i < sizeof(UART_command);i++){ USART2_Write_Char(UART_command[i]); } } при таком раскладе на обратной стороне вижу в бебагере не то что отправлял а если в фции перед циклом отправки вставить memset(UART_command,1,sizeof(UART_command)); т.е. так //........ memset(UART_command,1,sizeof(UART_command)); //для дебага //отправляем for(i=0;i < sizeof(UART_command);i++){ USART2_Write_Char(UART_command[i]); } то все прекрасно приходит смотрю дебагером без memset перед отправкой, в массиве 1цы, как и должно быть как-так то ? ещё, бьется всегда 1вый быйт в посылке, остальные вроде нет хм если делаю перед циклом отправки UART_command[0] = 1; то все хорошо изменил прототип на void UART_Send_Connamd(uint8_t command) перед циклом отправки UART_command[0] = command; и все плохо особенности компилятора ? кейлом пользуюсь
Комментарии: 19
Alexey
А что делает функция усарт_врайт_чар? Просто кладёт байт в регистр DR?
Denis
void USART2_Write_Char(uint8_t data) { while(!(USART2->SR & USART_SR_TC)); USART2->DR=data; }
Alexey
Аа. Ок. А то я подумал просто в форе кидается куча байт в др)) А уарт_комманд как объявлена?
Denis
uint8_t UART_command[10];
Alexey
Вот
Denis
так я дебагером гляжу что я отправляю, +закоменчено все что можно
Alexey
И видите что отправляете 0хА?
Zumin
Нет, нет, именно command
Denis
это параметр ф-ции void UART_Send_Connamd(uint8_t commnad)
Alexey
Ахаха. Кстаьт да. У вас параметр в функции не указвтель
Denis
делал ещё так uint8_t tmp[10]; memcpy(tmp,UART_command,sizeof(UART_command)); и отправлял tmp результат тотже
Alexey
А передаете массив А нет. Я погнал лол Это же второй приемр))
Dmytro
Размер массива tmp сделайте не 10, а sizeof(uart_command) Либо в memcpy размер выбирайте по меньшему из массивов А то небезопасно - если tmp окажется меньше чем UART_command Ещё рекомендую пользоваться https://pastebin.com когда код в чат скидываете (то есть скидывать ссылку)
Zumin
Да, но он называется commNad , а не command
Denis
не, не изначально было void UART_Send_Connamd(void) и передавал массив который обьявлен глобально потом сделал void UART_Send_Connamd(uint8_t commnad) и перед отправкой 0му элементу массива присваивал значение параметра UART_command[0] = command;