Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 30, 2012 08:40:09
Спасибо, попробую)
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
На 4Мб использовать FAT32 ??? Вы наверное забыли, что такое дискета 5.25" на 1.2Мб.Alexeyslav писал(а):Нельзя. По той простой причине, что как правило FAT-таблица отъедает приличный кусок. У вас есть микросхема FRAM на 4Мб чтобы под файлы реально использовать только два?
Таки вроде команды-то у всех общие. Это уже от конкретного компилятора будут зависеть нюансы.kocmoc писал(а):система комманд С/С++ (общение с МК)
Код: Выделить всё
#include "stm32f10x.h"
#include "STM32_Init.h"
#include "rtl.h"
#define Set_PortC_Pin_8_output ((GPIOC->CRH |= 0x2)|(GPIOC->CRH &= ~0xC))
#define Set_PortC_Pin_9_output ((GPIOC->CRH |= 0x20)|(GPIOC->CRH &= ~0xC0))
const unsigned long led_mask[] = { 1UL<<8, 1UL<<9 };
OS_TID t_LED1;
OS_TID t_LED2;
void DevsInit(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
Set_PortC_Pin_8_output;
Set_PortC_Pin_9_output;
}
void LEDOn (uint32_t num)
{
GPIOC->BSRR = led_mask[num];
}
void LEDOff (uint32_t num)
{
GPIOC->BRR = led_mask[num];
}
__task void f_LED1 (void)
{
while (1)
{
LEDOn (0);
os_dly_wait (200);
LEDOff (0);
os_dly_wait (200);
}
}
__task void f_LED2 (void)
{
while (1)
{
LEDOn (1);
os_dly_wait (400);
LEDOff (1);
os_dly_wait (400);
}
}
__task void init (void)
{
os_tsk_prio_self (100);
t_LED1 = os_tsk_create (f_LED1, 20);
t_LED2 = os_tsk_create (f_LED2, 20);
os_tsk_delete_self ();
}
int main (void)
{
SystemInit ();
stm32_Init();
DevsInit();
os_sys_init(init);
return 0;
}
Если нужен UART, можно использовать STM32_Init.c. Использовать его можно и как визард, наставить нужных галочек, а можно прямо из него выдрать готовый код инициализации uart-а. Типа такого:
Код
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // enable clock for Alternate Function
AFIO->MAPR &= ~(1 << 2); // clear USART1 remap
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // enable clock for GPIOA
GPIOA->CRH &= ~(0xFFUL << 4); // Clear PA9, PA10
GPIOA->CRH |= (0x0BUL << 4); // USART1 Tx (PA9) alternate output push-pull
GPIOA->CRH |= (0x04UL << 8); // USART1 Rx (PA10) input floating
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // enable clock for USART1
USART1->BRR = (0x9C << 4);
USART1->BRR = 0x4;
USART1->CR1 |= (USART_CR1_RE | USART_CR1_TE); // RX, TX enable
USART1->CR1 |= USART_CR1_UE; // USART enable
А чтобы потом вывести что нить, достаточно дописать две короткие функции:
Код
void UartSendChar (char ch)
{
while (!(USART1->SR & USART_SR_TXE)) {}
USART1->DR=ch;
}
void UartSendStr (char *str)
{
while (*str != 0)
{
UartSendChar (*str++);
}
}
Код: Выделить всё
void usart_send(char *s, unsigned char Ln)
{
PORTC |= (1<<PC3); // RS485 на передачу
for(uchar r = 0;r<Ln;r++)
{
while(!(UCSRA & (1<<UDRE))){_wdr();} //Тупим, пока не освободится регистр UDR
UDR = s[r];
}
PORTC &= ~(1<<PC3); // RS485 на прием
}
Код: Выделить всё
void usart_send(char *s, unsigned char Ln)
{
PORTC |= (1<<PC3); // RS485 на передачу
for(uchar r = 0;r<Ln;r++)
{
while(!(UCSRA & (1<<UDRE))){_wdr();} //Тупим, пока не освободится регистр UDR
UDR = s[r];
}
}
///////////////////////////////////////////////////////////////////////////////
void USART_TXC_vect() //Прерывание по окончанию передачи
{
PORTC &= ~(1<<PC3); // RS485 на прием
}
это больше похоже на стеб какой то, вопрос был не о том откуда тактировать Мк, а о том, как написать прошивку для Мк, чтобы его использовать вместо блока управления двигателем.Вообще-то МК от кварца тактируется. Иногда от внутреннего или внешнего генератора. Но чтобы от карбюратора или инжектора
Ничего не произойдет. Биты защиты можно установить только один раз и сбрасываются только после окончания процесса полной очистки. В первых контроллерах были баги позволяющие разлочить контроллер без стирания программы - играться с напряжением питания и временем прерывания процесса стирания так что биты защиты стирались а программа нет - но этот процесс требует тонкой настройки на сотне подопытных из одной партии. Сейчас эта проблема решена и просто так не разлочишь. Остается только один выход - при помощи напильникаазотной кислоты снимать кристалл послойно и электронным микроскопом считывать состояния ячеек, потом по известной топологии кристалла восстановить содержимое FLASH-памяти побитно. Но сам представь сколько для этого потребуется ресурсов. Стоит ли того содержимое памяти контроллера?убрать все галочки кроме «шить фьюзы»... что произойдет при попытке?