Пусть у нас есть сервер, на который нам нужно передать какие-либо данные с удаленного девайса (например передать информацию о температуре, или о давлении или количестве подсчитанных импульсов, или о чем-то другом). Проделаем это мы через GPRS, используя модем SIM900.
TCP/IP Ethernet(v2) на примере. Часть 2 — Ethernet(v2)
Рассмотрим tcp/ip и ethernet протоколы на примере. Для этого я установил соединение c tcp сервером на ПК, через модем GPRS на модеме SIM900(о том как работать с SIM900 смотрите эту статью).
Для отслеживания сетевых пакетов на ПК используется программа анализатор трафика(сниффер) wireshark. Данная программа позволяет не только отслеживать сетевые данные, но и получать полную информацию о пакетах различных протоколов их вложенность и содержание.
TCP/IP Ethernet(v2) на примере. Часть 1 — TCP
Рассмотрим tcp/ip и ethernet протоколы на примере. Для этого я установил соединение c tcp сервером на ПК, через модем GPRS на модеме SIM900(о том как работать с SIM900 смотрите эту статью).
Для отслеживания сетевых пакетов на ПК используется программа анализатор трафика(сниффер) wireshark. Данная программа позволяет не только отслеживать сетевые данные, но и получать полную информацию о пакетах различных протоколов их вложенность и содержание.
STM32 DMA
Процедура конфигурации канала DMA.
Итак, первоначально надо определиться с источником и получателем данных, откуда и куда будем пересылать. Фактически все задается прямыми адресами в пространстве памяти, для этого предназначены два регистра: DMA_CPARx (базовый адрес периферии) и DMA_CMARx (базовый адрес памяти). В этих регистрах заданы начальные адреса, они остаются неизменными.
keil, map-файл и занятая память
В проекте в файле с расширением .map в конце указаны:
Total RO Size (Code + RO Data) 5496 ( 5.37kB)
Total RW Size (RW Data + ZI Data) 10472 ( 10.23kB)
Total ROM Size (Code + RO Data + RW Data) 5572 ( 5.44kB)
Total RW Size — RAM (оперативка) занимаемая программой
Total ROM Size — FLASH занимаемая программой
Подтяжка USB шины — определяет скорость обмена
На самом деле подтяжки в USB устроены так:
- pull-up на D- на стороне девайса — девайс говорит, что он Low-speed;
- pull-up на D+ на стороне девайса — девайс говорит, что он Full-speed или High-speed (уточняется в дальнейшем диалоге с хостом);
- оба пина без подтяжек на стороне девайса — он отключен от шины, и хост с ним не работает;
STM32, USART прерывания, отличие TC и TXE
Регистр статуса модуля USART, USART_SR — в нем находятся флаги, указывающие на текущее состояние модуля.
PE (разряд 0) — ошибка паритета при приеме байта. Можно задавать четное или нечетное число единиц в принимаемом байте. Если приняли байт, а в нем другое количество единиц, значит имеем ошибку.
FE (разряд 1) — ошибка кадра при приеме байта, т.е. первый стоп-бит принятой посылки равен 0.
NE (разряд 2) — флаг наличия шума. Ставится аппаратно, когда обнаружен шум в принимаемом кадре.
RXNE (разряд 5) — в регистре данных приема есть данные, т.е. принят байт данных, нужно срочно что-то делать.
TC (разряд 6) — передача завершена. Если регистр передачи данных пуст (на что указывает флаг TXE регистра USART_SR) и в USART_CR1 бит TCIE=1, то генерируется прерывание.
TXE (разряд 7) — регистр данных передачи пуст.
В чем отличие TXE от TC ?
USART передает данные из сдвигового регистра. А в этот сдвиговый регистр они попадают из регистра DR: процессор записывает данные в DR и в нем они будут находиться пока сдвиговый регистр не освободится. Как только он освободится (данные будут переданы) информация из DR будет переписана в него и будет установлен флаг TXE (регистр данных пуст). Если процессор на это никак не отреагирует, то по освобождению сдвигового регистра будет установлен также флаг TC.
Находим вершину стека STM32
Данная процедура может понадобиться например в RTOS при смене контекста выполняемой задачи, когда необходимо сохранить стек в определенной памяти отведенной под стек задачи.