21.01.2015, 21:58
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Keil и русский язык
YURALL72, Внимательно посмотри на картинки .
Важное я выделил .
При utf8 буквы кодируются 2 байтами ,
так что неудивительно что в switch-case у тебя никогда не будет совпадений .
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
21.01.2015, 22:19
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Keil и русский язык
Здесь наверное наглядней будет ...
__________________
Осторожно , злой кот
|
|
|
|
22.01.2015, 02:18
|
|
Прописка
Регистрация: 29.06.2007
Сообщений: 217
Сказал спасибо: 143
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
|
Re: Keil и русский язык
Пытаюсь запустить SPI в первый раз.Не получается.Регистр SPI2-›DR записуется,но потом жму пошаговую отладку,а он стоит на месте,не сдвигается.Помогите кому не трудно.
void SPI_ini(void)
{
GPIO_InitTypeDef GPIO_Init_LED;//создаем переменную типа структуры GPIO_InitTypeDef
SPI_InitTypeDef SPI_Init_user;//создаем переменную типа структуры SPI_InitTypeDef
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //включаем тактирование порта В
GPIO_Init_LED.GPIO_Pin = GPIO_Pin_12 |GPIO_Pin_13 |GPIO_Pin_15;//указываем нужные порты
GPIO_Init_LED.GPIO_Mode = GPIO_Mode_AF;//Режим-альтернативная функция
GPIO_Init_LED.GPIO_Speed = GPIO_Speed_40MHz;//самая большая скорость порта
GPIO_Init_LED.GPIO_OType = GPIO_OType_PP;//двухтактный выход
GPIO_Init_LED.GPIO_PuPd = GPIO_PuPd_NOPULL;//без подтяжки
GPIO_Init(GPIOB, &GPIO_Init_LED);//записуем конфигурацию порта
GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_SPI2);//альтернативная функция SPI2
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);//Включаем тактирование SPI2
SPI_Init_user.SPI_Direction = SPI_Direction_1Line_Tx;//Режим только передатчика
SPI_Init_user.SPI_Mode = SPI_Mode_Master;//Режим мастера
SPI_Init_user.SPI_DataSize = SPI_DataSize_16b;//Размер данных 16 бит
SPI_Init_user.SPI_CPOL = SPI_CPOL_Low;//Начальное состояние тактовой частоты низкое
SPI_Init_user.SPI_CPHA = SPI_CPHA_1Edge;//стробирование по первому (нарастающему) фронту
SPI_Init_user.SPI_NSS = SPI_NSS_Soft;//сам буду управлять сигналом выбора чипа CS
SPI_Init_user.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;//скорость = 32/8 = 4МГц
SPI_Init_user.SPI_FirstBit = SPI_FirstBit_MSB;//Первый старший бит
SPI_Init_user.SPI_CRCPolynomial = 7;//х.з. что это
SPI_Init(SPI2, &SPI_Init_user);//записуем конфигурацию SPI
SPI_Cmd(SPI2, ENABLE);//Включаем SPI
}
//**********************************************
// аппаратная отсылка данных при помощи SPI
//
//**********************************************
void WriteSpiCommand(volatile unsigned int command)
{
command = (command & (~0x0100));//т.к. это команда то 9-й бит =0
command = command ‹‹7;//сдвигаем в старшие разряды,передача старшим битом вперёд
// wait for the previous transfer to complete
while(!(SPI2-›SR & SPI_SR_TXE)); //TXE – устанавливается при опустошении буфера передатчика
GPIO_SetBits(PORT_LCD, CS_LCD);//после того как дождались пересылки байта дергаем CS
GPIO_ResetBits(PORT_LCD, CS_LCD);//готовим cs к передаче
// send the command
SPI2-›DR = command;//записуем байт и начинается передача
//SPI_I2S_SendData( SPI2, command);
//delay_us(5);
}
void WriteSpiData(volatile unsigned int data)
{
data = (data | 0x0100);
data = data ‹‹7;
// wait for the previous transfer to complete
while(!(SPI2-›SR & SPI_SR_TXE));//TXE – устанавливается при опустошении буфера передатчика
GPIO_SetBits(PORT_LCD, CS_LCD);//CS_LCD_SET;
GPIO_ResetBits(PORT_LCD, CS_LCD);//CS_LCD_RESET;
// send the data
SPI2-›DR = data;
//SPI_I2S_SendData( SPI2, data);
//delay_us(5);
}
|
|
|
|
22.01.2015, 09:23
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Keil и русский язык
YURALL72, Если не ошибаюсь в L такой же SPI как и в 103 .
Для 8битных одиночных транзакций .
Код:
|
void Spi_init(void) //настроить модуль SPI
{
RCC-›APB2ENR |= RCC_APB2ENR_SPI1EN; //
SPI1-›CR1 = 0x0000; //
SPI1-›CR2 = 0x0000; //
SPI1-›CR1 |= SPI_CR1_MSTR|SPI_CR1_SSI | SPI_CR1_SSM| SPI_CR1_SPE;
}
uint8_t Spi_send (uint8_t data)
{
SPI1-›DR = data; //
while (!(SPI1-›SR & SPI_SR_RXNE)); //
return (SPI1-›DR); //
} |
и конфиг лап.
Код:
|
void GPIO_init (void)
{
RCC-›APB2ENR |=
RCC_APB2ENR_IOPAEN
;
//RSET
GPIOA-›CRL |= GPIO_CRL_MODE2; //
GPIOA-›CRL &= ~GPIO_CRL_CNF2; //
GPIOA-›BSRR = GPIO_BSRR_BS2; //
// RS:
GPIOA-›CRL |= GPIO_CRL_MODE3; //
GPIOA-›CRL &= ~GPIO_CRL_CNF3; //
GPIOA-›BSRR = GPIO_BSRR_BS3; //
// SS:
GPIOA-›CRL |= GPIO_CRL_MODE4; //
GPIOA-›CRL &= ~GPIO_CRL_CNF4; //
GPIOA-›BSRR = GPIO_BSRR_BS4; //
//SCK:
GPIOA-›CRL |= GPIO_CRL_MODE5; //
GPIOA-›CRL &= ~GPIO_CRL_CNF5; //
GPIOA-›CRL |= GPIO_CRL_CNF5_1; //
// MISO:
GPIOA-›CRL &= ~GPIO_CRL_MODE6; //
GPIOA-›CRL &= ~GPIO_CRL_CNF6; //
GPIOA-›CRL |= GPIO_CRL_CNF6_1; //
GPIOA-›BSRR = GPIO_BSRR_BS6; //
//MOSI:
GPIOA-›CRL |= GPIO_CRL_MODE7; //
GPIOA-›CRL &= ~GPIO_CRL_CNF7; //
GPIOA-›CRL |= GPIO_CRL_CNF7_1; //
} |
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
22.01.2015, 10:56
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Keil и русский язык
Сообщение от YURALL72
|
Пытаюсь запустить SPI в первый раз.Не получается.Регистр SPI2-›DR записуется,но потом жму пошаговую отладку,а он стоит на месте,не сдвигается.
|
А он и не должен сдвигаться. Читайте мануал. Данные выплёвываются из регистра сдвига, а не из DR.
И такие вещи пошагово делать бесполезно, зациклитесь на первой же проверке флага даже на рабочей проге.
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
22.01.2015, 15:39
|
|
Прописка
Регистрация: 29.06.2007
Сообщений: 217
Сказал спасибо: 143
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
|
Re: Keil и русский язык
Ребят,а в Кейле работает логический анализатор для STM32L152 ?А то я перечитал всё скудное что нашел в инете,а запустить не смог.На все порты ругается-неизвестный сигнал.Как его заставить работать?А то без визуального наблюдения тяжко.
|
|
|
|
23.01.2015, 02:42
|
|
Прописка
Регистрация: 29.06.2007
Сообщений: 217
Сказал спасибо: 143
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
|
Re: Keil и русский язык
Запустил дисплей по СПИ 16 бит.Инициализация прошла,на экране мусор.Смысл в том что он принимает первые 9 бит нормально.А после следующих 7 бит я сбрасываю CS и он бракует и отбрасывает этот неполный байт.Но возникла проблема,у мя какого-то ляха не выставляется и не сбрасывается бит BSY и TXE.Сделал задержку и всё заработало.Теперь буду разбираться с этими битами.Мож кто знает плиз подскажите.Тяжёлые эти stm32 просто жуть.
Пример передачи команды.
void WriteSpiCommand(volatile unsigned int command)
{
command = (command & (~0x0100));//т.к. это команда то 9-й бит =0
command = command ‹‹7;//сдвигаем в старшие разряды,передача старшим битом вперёд
// wait for the previous transfer to complete
//while(!(SPI2-›SR & SPI_SR_TXE)){}; //TXE – устанавливается при опустошении буфера передатчика
GPIO_ResetBits(PORT_LCD, CS_LCD);//готовим cs к передаче
// send the command
SPI_I2S_SendData(SPI2, command);//SPI2-›DR = command;//записуем байт и начинается передача
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}//while (!(SPI1-›SR & SPI_SR_BSY)){};
GPIO_SetBits(PORT_LCD, CS_LCD);//после того как дождались пересылки байта дергаем CS
delay_us(40);
}
Работает SPI_BaudRatePrescaler и 2 и 4 и 8 ставил работает.Но задержка 40 мкс напрягает(((
Последний раз редактировалось YURALL72; 23.01.2015 в 02:48.
|
|
|
|
23.01.2015, 10:34
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Keil и русский язык
command = (command & (~0x0100));//т.к. это команда то 9-й бит =0
command = command ‹‹7;//сдвигаем в старшие разряды,передача старшим битом вперёд
GPIO_ResetBits(PORT_LCD, CS_LCD);//готовим cs к передаче
// send the command
SPI_I2S_SendData(SPI2, command);//SPI2-›DR = command;//записуем байт и начинается передача
while(!(SPI2-›SR & SPI_SR_TXE)){}; //TXE – устанавливается при опустошении буфера передатчика
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}//while (!(SPI1-›SR & SPI_SR_BSY)){};
GPIO_SetBits(PORT_LCD, CS_LCD);//после того как дождались пересылки байта дергаем CS
|
|
|
|
23.01.2015, 14:04
|
|
Прописка
Регистрация: 29.06.2007
Сообщений: 217
Сказал спасибо: 143
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
|
Re: Keil и русский язык
Всем привет.Попробовал,без задержки 40мкс не работает.При пошаговой отладке проходит циклы проверки флагов без остановки.Да , я ток заметил флаги в отладчике почему-то серые,не активные.
На втором рисунке частота ЧЕГО должна быть выставлена?Кварца (я впаял кварц 8Мгц на 152L дисковери),частота на которой работает ядро (я думаю 32Мгц) или самого программатора st-link?
Последний раз редактировалось YURALL72; 23.01.2015 в 14:08.
|
|
|
|
23.01.2015, 15:28
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Keil и русский язык
YURALL72, Не трогай ты этот анализатор , ничего он тебе не даст.
Лучше купи Saleae Logic Analyser http://ru.aliexpress.com/wholesale?S...20150123032837
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:27.
|
|