Search the Community
Showing results for tags 'STM32F103C8T6'.
-
Доброго времени суток! Недавно решил продолжить свое изучение микроконтроллеров и с AVR перейти на STM32. Понял специфику и решил применить новые знания на практике. Нашел дисплей MT-16S2H (https://www.melt.com.ru/pdf/mt-16s2h.pdf) и набросал кода для инициализации и вывода символа. Подсветка загорелась, но вывести ничего не получилось) Начал смотреть что написал. Порты инициализировал правильно, сам дисплей вроде тоже, запись данных вроде тоже. Предполагаю что косяк где-то с курсором или символ не правильно как-то вывожу: void setPos(int8_t row, int8_t col) { if (row == 0) col|=0x80; else col|=0xC0; sendbyte(col, 0); } void sendchar(char c) { sendbyte(c, 1); } Это мои предположения где может быть ошибка, надеюсь знаток найдется. Весь код прикладываю ниже. Заранее спасибо за помощь:) main.c
-
Почему может неправильно работать uart? Подключил 1 uart к пк через usb/uart переходник, а второй к gsm модему. В первый уарт вывожу инфу для дебага, а во второй AT команды. Суть в том, что сообщения для 2 уарта выводятся в 1 уарт и выводятся как то странно не полностью Вот такой вывод постоянно: Begin End AT+CNMI=2,2,0,0,0 AT+CMGEnd AT+CNMI=2,2,0,0,0 а должно быть просто begin end и все полный код https://pastebin.com/zBBZmZue
- 10 replies
-
- STM32F103C8T6
- UART
-
(and 2 more)
Tagged with:
-
Здравствуйте, мне нужна помощь с подключением дисплея WG12864 к STM32F103C8T6. А именно? Я не нашёл библиотек для него, лишь только ардуиновские. Может у кого есть своя? С STM32 опыта почти нет. Так мигал светодиодом и всё, но зато ардуину я уже знаю всё. Я перерос её и мне хочется освоить стм.
- 4 replies
-
- KS0108
- STM32F103C8T6
-
(and 8 more)
Tagged with:
-
Добрый вечер. Решил недавно поиграться с микроконтроллерами, ибо были в загашнике такие платы: Ппробовал погонять данные по USART. В обычном режиме - все работает нормально, но вот с прерываниями - немного не получается. Я взял пример из стандартной библиотеки, скомпилил, залил и прерывание не срабатывает. #include <stm32f10x.h> #include <misc.h> volatile char received_string[MAX_STRLEN+1]; void Delay(__IO uint32_t nCount) { while(nCount--) { } } void init_USART1(uint32_t baudrate){ GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStruct); USART_InitStruct.USART_BaudRate = baudrate; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART1, &USART_InitStruct); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_Cmd(USART1, ENABLE); } void USART_puts(USART_TypeDef* USARTx, volatile char *s){ while(*s){ while( !(USARTx->SR & 0x00000040) ); USART_SendData(USARTx, *s); *s++; } } int main(void) { init_USART1(9600); // initialize USART1 @ 9600 baud USART_puts(USART1, "Init complete! Hello World!\r\n"); // just send a message to indicate that it works while (1){ /* * You can do whatever you want in here */ } } void USART1_IRQHandler(void){ // check if the USART1 receive interrupt flag was set if( USART_GetITStatus(USART1, USART_IT_RXNE) ){ static uint8_t cnt = 0; // this counter is used to determine the string length char t = USART1->DR; // the character from the USART1 data register is saved in t // check if the received character is not the LF character (used to determine end of string) // or the if the maximum string length has been been reached if( (t != '\n') && (cnt < MAX_STRLEN) ){ received_string[cnt] = t; cnt++; } else{ // otherwise reset the character counter and print the received string cnt = 0; USART_puts(USART1, received_string); } } } Решил упростить задачу и поморгать светодиодом: void USART2_IRQHandler(void){ USART_ClearITPendingBit(USART2, USART_IT_TC); USART_ClearITPendingBit(USART2, USART_IT_RXNE); static uint8_t isSet = SET; GPIO_WriteBit(GPIOC , GPIO_Pin_13 , isSet); isSet = !isSet; } Оно в обработчик вообще не попадает. Подскажите, может что не так делаю? Отладчика пока нету, заказал - жду. Есть FTD USB-UART преобразователи, через них прошиваю и проверяю. А еще я в основной цикл добавил постоянную отправку строки, и оно таки прерывается, когда я шлю байт с компа, но в обработчик оно, походу, не попадает. Пробовал на USART2 - такая же фигня.
- 36 replies
-
- stm32
- stm32f103c8t6
-
(and 1 more)
Tagged with: