1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import lr611pro_esp32_v100 as rf_mesh
import time
 
#lr611pro class 
lr611 = rf_mesh.LR611pro(com_port=1,com_baudRate=9600)
 
#auto baudrate with lr611pro module
lr611.serial_auto_set()
 
#lrpro.json read and compare lr611pro
err_cnt = lr611.comp_lrpro_json("lrpro.json")
#json 설정과 lr611pro 설정이 일치하지 않으면 json 설정으로 덮어쓴다.
if (err_cnt):
  lr611.write_lr611_with_json()
#현재 lr611pro 정보 표시
lr611.info()
 
#lr611pro를 RF 통신 모드로 연결
lr611.RF_Connect()
time.sleep(0.5)
 
while True:
  lr611.write_RF("hello world~!!\r\n"#송신
  time.sleep(1)
  rcv_buf = lr611.read_RF() #수신
  if (rcv_buf):
    print(rcv_buf)

자석으로 간치료 시즌3
자석 치료에 있어 뭔가 규칙이 보이는 것 같다. 좀 더 확인이 필요하지만, 아마도 미네랄이 자석과 상관관계가 있는 듯 하다.


처음 간에 자석을 붙였을 때, 4일동안 붙인체로 몸이 빠르게 좋아졌었다. 그러나 5일째부터 안 좋았다. 그러다 자석을 붙이고 선배와 소주를 엄청나게 먹었는데, 안주를 잘 먹었던 것 같다. 내 생각엔 안주에서 미네랄을 흡수한 듯 싶다. 모듬 파전과 마른 생선류를 먹었으니 소금이나 생선, 버섯,당근 등등 영양가나 미네랄이 많은 음식으로 보인다. 이 때에는 숙취가 전혀 없었고, 다음날 술 냄새도 안났다. 소주를 혼자 5병을 먹은 듯 하다.


이번에 우연치 않게 회사에 커피가 떨어져서, 입이 심심하다보니 히말라야 핑크 소금을 따뜻한 물에 타서 몇 번 먹고 나서, 혹시나 하고 자석을 3일 내내 붙이고 떼지 않았는데 몸이 점점 좋아지고 있다.


우연히 3일동안 붙인 것이다. 원래는 몇시간 붙이면 부작용이 나려니 생각하고 뗄려고 했는데, 괜찮아서 계속 붙여 놓은 것이 3일째다.


핑크소금에는 각종 미네랄이 많이 들어 있다. 간과 상관있는 미네랄이 뭔지는 모르겠지만, 너무 오래 자석을 붙였을 때의 부작용이 사라졌다. 나는 이것이 히말라야 핑크소금에 들어 있는 미네랄이라고 조심스럽게 예상을 해 보고 있다.


자석으로 간을 치료하는 시도를 한 지도 벌써 1달을 넘어서면서, 이번에는 확실한 해법을 발견했기를 .. 진정 바란다. ^^


[5일째]

5일째, 자석을 붙인 상태로 5일이 되니 점심 이후부터 속이 불편해 졌다. 그래서 저녁에 자석을 떼고 현재는 6일째 아침이다. 그런데 이전과 틀린점은 자석을 떼고도 상태가 금방 나빠지지가 않는다.



그러니까.. 좋은 상태로 어느정도 유지가 되는 듯 하다. 예전에는 방안의 온도를 올리려고 뗄감을 테우는데 뗄감이 부족해서 더이상 온도가 안 올라가서 문제인 것이고, 이번에는 핑크소금을 먹어서 뗄감이 충분히 많아서 온도가 너무 올라간 상태랄까?


어제 자석 전문가를 만나서 이야기를 해 보니까, 핑크소금으로 자석과 같이 연동한 경우는 내가 처음이라고 한다. 그러나 너무 오래 붙이면 안 좋을 수 있다고 했다. 한 10일은 더 붙여 볼려고 했는데, 이제는 그 한계가 온 듯 하다. 이게 정상적이라 믿고, 자석을 붙이지 않은 체로 조금 더 상태를 지켜 봐야겠다.


[6일째]

6일째, 자석을 안 붙여도 상태가 좋다. 점심 먹고 설사를 안한다. 손도 더 많이 좋아졌다.


다른 소금은 안될 것이다. 왜냐하면 매일 먹는 음식에 소금이 들어 있기 때문이다. 점심을 식당에서 먹는데, 항상 짠 국이 나오기 때문에 소금을 항상 먹는 것은 틀림이 없으며, 아무런 효과가 없었다.


6일째 저녁 8시경, 자석을 다시 붙였다. 얼굴 피부가 또 더 좋아지고 소화도 잘된다. 이번에는 안 붙여도 괜찮은 수준인데, 한 번 더 붙여봤다. 얼마나 가면 오버가 되는지 알기 위해..


[8일째]

8일째. 이제는 붙이나 안붙이나 큰 차이가 없네요. 커피 를 10잔 먹었던 걸 커피 4+핑크 2 으로 줄여서 먹고 있습니다.
자석으로 간 치료의 가장 중요한 요소는 핑크소금 먹는 것 같습니다. 물론 몸에 미네랄이 충분하면 저처럼 핑크소금을 안먹어도 될 겁니다. 저는 부작용의 원인을 찾다보니 핑크소금을 먹게 됐네요.



이번 치료방법으로 핑크소금을 사용하면서 자석을 붙이면 부작용이 거의 없이 간이 좋아짐을 확인했습니다.
이 정도면 안정적으로 간치료에 자석을 이용해도 된다는 결론을 얻었습니다. 현재 얼굴이나 다른 곳의 피부가 정말 많이 좋아졌고, 간지러운 피부도 없어지고, 발바닥 무좀으로 알았던 것도 일반인의 발로 돌아 왔습니다. 또한 점심먹고 항상 설사하는 증상도 없어졌고, 우유도 먹을 수 있게 됐습니다.

실험은 이 정도로 마무리 하겠습니다.



'건강' 카테고리의 다른 글

자석으로 간치료 시즌 2  (0) 2018.10.14
자석으로 간치료 일기 (현재 B형간염 환자임)  (0) 2018.09.19

[자석으로 간치료 - 시즌2]
20여일동안 자석으로 간을 치료해 본 결과, 간은 좋아진 것은 확실하나 없던 간염 증상도 좀 생기는 듯 하다. 내가 내린 결론은 간도 좋아지지만 감염 바이러스도 같이 활성화 되는 것이 아닌가 하는 것이다. 왜냐하면 처음에는 간이 하도 나빠서 바이러스보다 간이 좋아지는 속도가 빨랐지만, 나중에는 둘다 같이 활성화되서 간이 나빠지는 속도 또한 빠른게 아닌가 싶다. 자석을 떼면 빨리 손이 까지는 것 을 보니 그렇다. 이번에 자석을 안 붙이고 바이러스만 잡아서 손은 거의 정상이 됐다.

내일부터는 자석을 붙이고 바이러스는 죽이면서, 저녁에 뗐을 때 바이러스를 또 죽이는 치료를 해 볼 예정이다. 그러면 간은 더 좋아지고 바이러스는 점점 더 사라져 갈 것으로 예상되며 컨디션은 더 좋아질 것이다.


[1일째]

오늘부터 간치료 및 기능 개선을 시작했습니다.
현재 간기능은 예전에 비해 많이 좋아졌지만, 제가 가정한 간기능 개선과 함께 간바이러스까지 활성화 된 것이 아닌가하는 것을 확인해 보려고 합니다.
그래서 간바이러스 제거를 위해 MMS 를 먼저 먹고 자석을 붙였습니다.이렇게 하면 간바이러스는 없어지거나 비활성화되고 간기능만 더 좋아지리라 예상됩니다. MMS 는 점심 먹고 1번 더 먹을 것이고, 저녁에는 마지막으로 자석을 떼고 MMS 를 한번 더 먹으면 간상태는 그대로 이고 간 바이러스는 제거 되리라 예상합니다.



점심 먹고 1시간 뒤에 다시 MMS를 먹었다. 간은 자석이 회복시켜 주는 중이고, 간염 바이러스는 MMS가 제거 또는 비활성화 하는 중이다. 자석을 떼고 MMS를 먹으면 비활성화 보다는 제거 수순으로 예상이 된다. 왜냐하면 만약 자석이 간염 바이러스도 활성화 시키는 작용을 한다면, 자석을 제거했으니 바이러스도 비활성화 되는 상태에서 제거제가 들어가니 그럴거라 예상을 해 본다.


오후 4:50 자석을 떼고 , MMS를 먹었다.


오후 10시, 자석은 뗀 상태로 MMS를 또 먹었다. 자석을 뗀 이후로 좀 가렵다. 손바닥은 까지나 뭐가 나지는 않았다.
오후 11시 59분 MMS 를 1번 더 먹는다. 손바닥 까지는 증상은 많이 완화되었다.

[2일째]
2일째, 계속해서 자석을 뗀 상태이며 자다가 일어나서 MMS를 1번 더 먹음. 새벽 3:44. 손은 많이 좋아짐.

아침 10시쯤 MMS 한 번 더 먹고 자석을 붙였는데, 손은 크게 좋아지지는 않는듯 하다. 좋아진 듯 하다가 다시까짐. 뭐지? 이건? 발은 좋아졌는데, 손은 왜 이모양이냐구...ㅜㅜ
손을 희생해서 몸이 좋아진다면... ㅉㅉ


오후 9시, 자석은 아침에 붙이고 아직 안 뗐다. 그리고 MMS 한번 또 먹음. 손아 뭔가 반응이라도 해라. ㅜㅜ



[3,4일째]

3,4 일째, 2일간 저녁에 집에 와서 붙이고 잤더니 아침에 눈이 붙고 손이 까진다. 그리고 아침에 떼고 회사에 오면 다시 좋아진다. 수질 정화제를 먹어도 이와 같은 것을 보니 현재 N극 과다 증상인듯 하다. 붙이지 말던가 저녁에 와서 붙인 후, 자기 전에 떼봐야 겠다. 수질 정화제를 먹은 후, 손에 뭐가 나지는 않는다. 다만 손은 위의 상황에서 처럼 까지므로 자석을 좀 자제해야 겠다.



4일째, 점심을 먹으니 배가 살살 안좋았는데 조금 있다가 설사를 했다. 자석을 안 붙인지 11시간이 됐는데, 예전의 자석을 전혀 안 썼던 때의 현상이다. 집에서도 이런 때에 바로 자석을 붙이면 속이 진정이 된다. 요즘은 자석을 안붙이면 손이 까지는 증상이 없어지면서 뭔가를 먹으면 쉽게 설사를 한다. 이제 어떤 시도를 해야 할까? 그렇다고 계속 붙이면 또 상태가 안좋아지고.. 하루에 밥먹을 때만 붙이고 떼어 볼까?



현재 오후 2시, 3시간만 붙이고 떼서 집에서는 괜찮은지 알아봐야겠다. 집에서 밥먹고 소화 될 때까지는 자석의 효과가 남아 있겠지.


[5,6일째]

 5,6일째, 이제는 자석을 붙이면 2~3시간 내에 간이 안좋아지는 증상이 생긴다. 아무리 수질정화제를 먹어도 나아지지 않는다. 그렇지만 간기능은 예전에 비해 좋아진 상태이다.
문제는 밥 먹을때와 밥 먹은 후에 속이 안좋은 것인데, 현재 상태는 자석을 안 붙인 상태가 몸상태가 더 좋아서 .. 밥먹을 때만 2시간 붙이고 뗄 예정이다.



요새 자석을 붙이면 안좋아지는 현상 중 하나로 오줌색이 노레지고, 떼면 다시 맑아진다. 이런 현상이 정말인지 좀 더 확인을 해볼 예정이다. 그런데, 밥먹을 때만 1~2시간 붙일 예정이라 다시 못 볼 수도 있다.


가장 먼저 자석으로 인한 몸의 변화는 눈인 것 같다. 안 좋으면 눈이 뻑뻑해지거나 붓는다. 그 다음으로 밥먹었을 때 소화도 되기 전에 속이 안좋아서 설사가 나오는 것, 그 다음은 손이 까지는 현상이고, 그 다음으로는 가슴에 반점이 생기거나 또는 진해지거나 흐려지거나 이다.


[7일째]

7일째, 밥먹을 때가 되서 붙였다. 지금부터 1시간 동안만 붙일 예정이다.


1시간 붙였는데 괜찮다가 떼니까 바로 신호가 오는구나. 2시간은 붙여야 될 것 같다. 그래서 다시 붙였더니 또 속이 편해진다.


[8,9일째]

8,9일째, 머리도 가렵고 손도 좋아지지 않아서 붙였다 뗐다를 반복해서 약 12시간 정도 자석을 붙인 듯 하다. 이번에는 N극이 과하지는 않았는지, 몸이 나빠지지는 않았다. 손도 많이 회복되고 반점도 더 흐려졌다. 
점점 더 미궁에 빠져든다. 정말 자석을 얼마나 붙여야 할 지를 모르겠다. 요즘엔, 눈이 가장 민감해서 자석을 붙여서 눈이 뻑뻑해지면 떼고, 안붙이고도 눈이 뻑뻑해지면 붙인다.



[10일째]

10일째, 이번에는 2일 넘게 동안 자석을 붙였는데 괜찮았다.


10일째, 혹시 핑크소금을 먹서서 그런걸까? 미네랑이 많아서 ? 간의 연료가 미네랄인것은 아닐까? 그동안 자석을 오래 붙였을 때 안좋아졌던것은 미네랄이 다타버려서 그럴수도 있다. 핑크 소금을 날마다 먹고 자석을 붙여놔 봐야겠다.


요새 회사에 커피가 떨어져서 커피를 많이 안먹었던 것과 핑크소금을 뜨거운 물에 타서 먹었던 점이 예전과 다른 것 같다. 정말 미네랄과 간과의 관계에 무언가 연결고리가 있는 것이 아닐까? 일단 커피는 미네랄 흡수를 막고 몸밖으로 배출해 버린다는 내용이 예전에도 들었지만 인터넷상에도 많이 보인다.
https://www.msn.com/.../%EC%BB%A4%ED%94%BC-%EB.../ar-AAw2HXU


우연치 않게 미네랄을 몸에 흡수를 많이 시킨 후, 자석을 붙였던 것도 같다. 커피를 덜 먹고 핑크 소금을 먹은 것이 그러하다. 현재 3일동안 붙였는데 부작용이 없다.

관리

'건강' 카테고리의 다른 글

자석으로 간치료 시즌3  (1) 2018.10.14
자석으로 간치료 일기 (현재 B형간염 환자임)  (0) 2018.09.19

[자석으로 간치료 일기] 계속업데이트 중입니다.



[간이 좋아지면서 발의 변화]


자석을 어디서 사냐고 물어 보셔서 글을 추가합니다. 저는 쿠팡에서 원형 네오디움 자석 6x2 mm(50원) 와 10x2mm(120원) 를 1만원 어치 구입했습니다. 그리고 약국에서 3M살색 테이프를 1천원에 구입하면 됩니다.

자석은 6x2mm 가 개당 50원밖에 안하는데, 제가 산 곳에서는 1만원어치 사면 막대 자석을 하나 줘서 극성을 알아내는데 유용합니다. 이 막대 자석은 자석 치료시에 꼭 필요한 아이템입니다.

자석 구입처 : 링크



2018년 9월 8일 간치료 시작

[1일째]

자석을 거꾸로(S극이 피부쪽으로) 붙이고 맥주를 집에서 1 피트 먹었다가 간염증상이 재발했었습니다. 간의 기운이 세서 간이 안좋다는 말을 듣고 자석을 반대로 붙였었는데, 맥주를 먹으면 약해지나 봅니다. 하여간 이 간염 증상이라는 게 몸에 반점이 생기고 반점 부위가 부우며, 손바닥이 까지고 설사가 나옵니다.
이번에는 발바닥까지 까지고 피부가 가려웠습니다.

이상해서 자석을 땟다가 혹시나 하는 마음에 반대로 붙이고, 오랜만에 예전 동네친구를 만나서 소주(저한테는 독주)까지 마셨는데, 다음날 증상들이 호전되고, 이전보다 해독기능이 좋아지는지 설사기까지 없어지네요.

자석으로 치료를 할 때 장기에 붙일 경우는 좀 주의를 해야 할 것 같네요. 그냥 목이나 어깨 뭉친데 붙이는 것은 상관이 없지만..




[2일째]

와. 2일째 붙이니 몸이 가렵고 각질이 떨어지던 증상이 사라져 갑니다. 자석으로 효과가 있네요.^^




[3일째]

3일째, 몸이 가려운 증상은 완전히 사라졌으며, 왼쪽발을 무좀으로 알고 살아왔는데 간 때문에 각질이 생겼던 것 같습니다. 피부 두께가 보통으로 돌아오고 있으며, 색깔도 원래대로 돌아오면서 발바닥 감각이 살아 나고 있네요. 또한, 점심만 먹으면 설사를 하던 증상이 오늘부로 사라졌습니다. 손바닥 색깔이 빨겧는데 점점 일반인 색으로 돌아오고 있습니다. ^^





가슴에 생겼던 많은 반점들이 사라지고 있습니다. 정말로 5년이상 있던 안좋은 증상들이 사라져 가네요. 진짜 믿을 수가 없네요. ㅜㅜ




[4일째]

4일째, 어제 저녁 1.6리터 맥주를 2병 먹었는데, 아침에 약간 배가 아팠지만 몸은 거의 20대때보다 나은 듯 합니다. 가슴에 반점은 보통때와 똑같고 아침에 숙취는 전혀 없었습니다. 가려움도 없습니다. 손바닥도 안까졌고, 그래도 너무 많이 먹은 탓인지 아침에 약간 설사는 했습니다. 
실험은 그만해도 될 듯 합니다. 간이 확실히 좋아 진 것 같네요. 2일째에도 1.6+1리터의 맥주를 먹었었습니다.


조금 더 효과를 올리기 위해, 오늘부터는 수질정화제(MMS)와 자석을 병행해 보려고 합니다.




짬뽕을 먹었는데 먹을때까지는 배가 안 아프다. 이정도도 많이 나아진 것인데, 아직은 완전히 좋아지진 않은 것인지, 회사에 돌아오니 배가 살살 아프다.




[5일째]

5일째, 간의 위치를 검색해서 알고 나서, 간 부위에 여러군데 붙여놨다. 내일은 어떤지 보자.
관리


[간의 위치]


저작권 문제가 발생할까봐 제가 직접 그렸습니다.





4일째는 자석을 잘못 붙인것 같다. 자석위치가 예전과 다르게 붙옅던것 같다. 스승뻘 되는 분이 여긴 아니라고 해서 옮겼는데, 거기가 아닌듯 하다. 나대로 다시 붙였더니 좋아진다. 현재대로 붙였으면 짬뽕 먹어도 괜찮았을 듯.. ^^




현재 잇몸의 붓기가 빠지고 있다. 이것도 간인가. 또한 눈이 움직일 때, 부드럽다. 이것도 간인가? 와.. 요새 너무 좋네요.




4일째 잘못 붙인 영향인지, 바로 머리가 가려웠었다.현재 제대로 붙이고 난 후로, 없어졌다.



자석 검증차, 오늘도 맥주 1.6리터 2병 먹었습니다. 간염 환자인데, 이정도면 벌써 간암으로 죽었을 겁니다. ^^
먹어도 괜찮아서 계속 갑니다.





자석은 왼쪽은 효과 없는 것 같아서, 뗏습니다.





5일째, 점심때부터 상태가 안좋아져가다가 저녁에는 약간 자극적인 음식을 먹고 설사를 했다. 몸이 무겁고 예전의 안좋았던 상태로 되어가는 듯 하다. 자석을 거꾸로 붙옇는지도 확인해 봤지만 이상이 없었다. 여전히 몸에 닿는 부분은 N극이 확실했다. 그래서 자석을 더 많이 간 부위에 붙였지만 안 좋은 것은 마찮가지 였다.



[6일째]

6일째, 아침에 몸이 무겁고 눈이 뻑뻑했다. 간 부위에 많이 붙였던 자석을 예전처럼 1개만 오른쪽에 붙였고, 상태는 나아지지 않는다. 그런데, 점심 때 자석을 뗏더니 상태가 나아지기 시작한다. 완전히 좋아지지 않았지만, 속이 답답하고 설사가 나오는 증상이 줄어 들었고, 몇시간이 지나니 좀 더 좋아지고 설사가 나오지 않았다. 자체적으로 내린 결론은 자석은 너무 오래 붙여 놔도 계속해서 더 좋아지는 것은 아닌 것 같다. 어느정도 좋아지면 뗐다가 다시 붙여야겠다.





자석이 N극이 좋고 나쁘고가 아닌듯 하다. N극도 오래 붙이면 안좋아진다. 그래서 이번엔 S극으로 다시 뒤집어 봤다. 사람의 몸은 조화가 가장 중요한 듯.. S극으로 약간 중화를 해야겠다.





제 이론이 맞는 것 같네요. 이젠 S극을 붙이니 좋아지네요. 조금만 더 붙여 놓으면 될 듯 합니다. 너무 붙이면 또 안 좋아지니.



[7일째]

 7일째, 어제 S극으로 1시간 붙이고 현재까지 안붙이고 있다. 너무 N극으로 간의 기준이 이동했으리라 믿고 잠깐 놔뒀다가 다시 N극을 붙여보려고 한다. 4일째만큼 좋진 않은데 예전의 아예 안 붙였던 때보다는 낫다. 현재 간 상태가 S극 쪽으로 치우쳤는지, N극으로 치우쳐 있는지를 모르겠다. 센서라도 있으면 좋으련만..

보통 사람의 몸은 아프면 S극으로 치우쳐서 N극을 붙이는게 아닐까 한다.

가만 놔두면 S극으로 수렴 할 것으로 생각이 든다. 현재는 N극쪽으로 많이 간 듯 하니 조금만 더 기다린다.




그런데, 이 자석치료가 지속성이 있는 것인지 의문이 든다. 4일만에 N극의 한계에 와서 안좋아 졌다가, S극으로 뒤집으면 금방 상태가 변한다. 이렇게 쉽게 왔다갔다 하니 지속성에 의문이 든다. 좋은 상태로 지속을 해주는 방법이 없을까 싶네.



[8일째]

8일째, 어제는 자석을 안붙였다가, 대학 선배가 한번 보자고 해서 다시 자석을 N극으로 붙이고 소주 맥주를 아주 많이 먹었다. 와우 숙취가 없네요. 몸은 더 좋아졌습니다. 발바닥은 더 말랑해졌고, 가슴에 반점은 더 없어졌다. ^^



[9일째]

9일째, 어제 술을 많이 먹고 나서 약간 쉬고 났는데 정말 예전과 다르게 몸이 가볍고 좋다. 8일 째부터 간쪽에 N극 지름6mm, 두께 2mm 자석을 붙여 놓은 상태이다. 이상하게 계속 붙여 놓고도 한계를 넘어가지는 않았는지, 상태가 계속 좋아진다.




5일째에 자석을 한꺼번에 많이 붙인 적이 있는데, 너무 과하게 붙여서 안 좋았던 것은 아닐까? 현재는 1개만 작은 것을 붙여놨는데 점점 몸상태가 좋아지고 있다.

과하면 안된다.



[10일째]

10일째, 저녁에는 자석을 뗐다. 작은 자석도 과하면 안되는 듯 하다. 조금 빨리 최대치가 오는 듯 하다. 이전보다 몸 상태는 좋다. 피부가 매끄러워지고 뭔가 뾰로지같은게 났던 부분이 없어졌다. 또 머리털이 윤기가 생기고 부드러워 졌다. 내일 아침에 다시 붙일 예정이다.



[11일째]

11일째, 아침에 목욕하고나니 손바닥이 까져 있다. 하지만 자석을 붙이면 급격하게 좋아 질 것이다. 아침 9시51분, 간에 다시 N극을 붙였다.



11일째 아침, MMS 도 1컵 먹어서, 혹시 간에 바이러스가 있을 경우 제거될 것이다. 자석을 붙인지 30분도 안되어 속이 편안해 지는 것을 보니, 밤새 간의 기준점이 S극 임계치 근처까지 내려 왔었다가 다시 N극으로 올라가는 듯 하다.




8일째 저녁에 N극을 간에 붙였고 10일째 저녁에 N극 임계치에 도달을 한 것을 보니, 점점 N극 임계치에 도달하는 기간이 줄어드는 듯 하다. 처음에는 4일만에 N극 임계치에 도달한 것으로 보이며, 2번째는 2일만에 임계치에 도달한 것으로 보인다. 이번에는 조금 더 빨라 질 것으로 예상된다.




11일째 저녁인데 벌써 N극의 임계점에 들어온 듯 하다. 아침에 붙이고 저녁이니, 3번째 자석을 N극에 붙이니까 제곱배로 빨리 N극의 임계치에 도달하는 듯 하다.
그렇게 느낀 이유는 간이 안좋았을 때와 같은, 손바닥이 까지기 바로 전 증상이 나타나기 때문이다. 그 증상은 손바닥에 볼록볼록 작은 뾰로지가 나는 증상이고, 이것이 올라왔다가 들어가면 손바닥이 까진다.


이제 떼야겠다. 내일 아침 다시 붙여야겠다.

아차, N극 일 때 이미 손에 뭐가 낫다면, 이건 자석을 떼서 나빠져서 손이 까진게 아니라 이미 손이 까질 기본 상태가 지난 것으로 N극이 과해서 나타나는 증상인 것 같다.

그래서 밤새 급히 S극으로 떨어진것으로 해서 간이 예전처럼 안좋아져서 손이 까진것으로 판단한 것이 잘못일 수도 있다. 이건 중요할 수 있다. 왜냐하면 S극으로 끝까지 떨어졌다는 가정이 틀릴 수 있어서, 자석을 떼면 엄청나게 빠른 속도로 S극 쪽으로 간상태가 수렴한다는 가정이 틀릴 수 있다.
즉 N극쪽에 가깝고 S극쪽으로 약간 떨어진 것일수 있다.





 N극의 임계점을 알 수 있는 증상은 피부가 가렵거나, 손이 빨게지면서 손바닥에 뭐가 나거나, 속이 안좋아서 설사가 나올 것 같은 느낌이 온다. 
이 증상은 간이 안좋을 때 나타나는 증상이고, S극의 임계점에서도 똑같은 증상이 나타난다.
이런 증상은 이제 익숙하다. 자석을 떼면 좋아지기도 하고, 내일 아침에 다시 N극을 간에 붙이면 빨리 좋아 질테니까.. 이건 2번째 반복해서 겪은 현상이다.




아직도 내 간이 어떤 상태인지 헤깔리다. ^^. 어쨌든 옛날보다 낫다.




N극으로 너무 가서 손이 까지고 만약 현재 간이 N극에 가까운 상태라면 , 또 S극으로 일반적으로 내려가는 것이라고 가정을 했을 때, 어쩌면 내일도 N극에 가까운 상태일 수도 있겠다. 그렇다면 내일은 자석을 안붙여 보려고 한다. N극에 가깝지만 N극에서 S극방향으로 내려가는 중일 수가 있어서 이다. 그것도 아주 천천히... 면 좋겠다. 그래야 자석으로 몸을 치료할 수가 있다.




이러다가 책을 쓰겠네.. 1달 실험하면 책분량이 나올듯. 책 내기전에 간검사. ^^





또 하나의 변화를 발견했다. 항상 혓바닥이 주홍색이었던 것이 보라색? 아니 보라색에 가까운 빨간색으로 변했다. 이것도 좋은 현상일까? 혀에 피가 잘 통하는 듯 하다.



[12일째]

12일째, 오늘은 자석 N극을 간에 붙이지 않을 예정이다. 그리고 또 1가지 호전 증상이 발견됐다. 오른쪽 발바닥에 있던 작은 티눈이 없어졌다. 참 신기하다. ^^




어제 저녁 7시경에 자석을 붙이지 않고 오늘 점심을 먹으니, 간이 나빴을 때의 증상인 소화불량이 나타났다. 내 가정은 틀린듯 하다 자고나면 S극쪽으로 빨리 떨어지는 듯 하다. 일단 12일째인 오늘 점심 먹고 N극을 간에 붙인다.




12일째, 점심먹고 설사한 후, 자석을 붙이인 다음 30분 정도 후부터 상태 좋아짐. 이건 뭐, 아침에 무조건 붙였다가 점심 먹고 떼야하나? 자석 전문가 오면 물어봐야 겠다. 아니면 저녁에 테스트랍시고 계속 맥주를 먹어서 그런가?




어떤 사람이 그러는데, 남반구에 사는 사람은 S극을 붙이고 북반구 사람은 N극을 붙여야 몸상태가 좋아진다고 하네요. ^^.
남반구를 갈 일이 없어서 확인을 못 하겠다.




오늘은 늦게 붙였더니 늦게까지 상태가 나빠지지는 않는다. 붙이고 자면 어떤지.. 싶다.




12시 넘어서 13일째, 오늘도 맥주를 먹고 상태를 확인했다.
머리털이 많아졌다. 머리숱이 없어져서 살이 보였는데 안보인다.



맥주를 먹으면 안되는데... 또 먹었고, 만두가 감기로 코가 막혀서 코에 몰래 자석 붙였다. 와이프한테 걸리면 혼난다. ^^





맥주는 1.6 x 2 을 먹었네.



[아들(만두)의 코감기 치료 ]

잠자는 만두 코에 자석 붙이니 코를 안 고네요. 30분안에 코골이 끝?



코감기까지 고친겐가. 너무 조용하게 만두 잘 잔다.^^







[13일째]

오늘은 13일째구나, 12일째 점심때부터 간에 N극을 붙인 상태이다. 뭐 안좋은 게 발견되지 않는데, 어쩔때는 좋고 또는 안좋고.. 이유가 뭔지 찾고 싶다. 하지만 몸은 전체적으로 훨씬 좋아졌다. ^^




[간치료 자석 붙이는 위치]





13일째 저녁 7시경 , 12일째 점심때 붙였던 자석을 뗐다. N극 한계에 도달한 듯 하다. 손이 까진다. 아.. 까지기 전에 떼면 좋으련만. ㅜㅜ

자석을 땠더니 30분 정도 지나서 속이 편해진다.

손바닥이 하루에 1번씩 임계치를 넘어서 까지니 남아나질 안네.


오늘 점심을 안 먹어서 몰랐는데, 좀 일찍 N극 한계가 왔었는지도 모른다. 자석을 떼고 2시간이 좀 지난 뒤에 보니 피부들이 부드러워 지는듯 하다. 역시 N극의 임계점이 있음을 다시 한번 확인할 수 있었다. 또한 속도 더 편안해 진다. 내일은 언제 자석을 붙이고 언제 떼야할까? ㅜㅜ


매일 술을 먹으니 뭐.. 상상도 못했던 일상이네요. ^^





[14일째]

14일째, 아침 8시30분경 자석을 간에 붙였다. 정확히 이전에 올린 자석 붙이는 위치가 아니여도 근처면 되는 듯 하다.




오늘은 항상 임계치를 왔다갔다 해서 손바닥이 너무 까져서 점심먹고 2시간 뒤에 자석을 뗄 예정이다.


손바닥이 하루에 한번씩 까졌다 복구됐다를 반복하네요. 복구되는 속도가 빨라서 좀전에 까진 손이 맞나 싶습니다. ^^


자석 치료법은 아니지만 유용한 혈을 이용한 치료방법이 있습니다. 링크주소 : http://blog.daum.net/dayzen/1939960


위의 링크가 자석 요법 맞네요.(혈에 N극을 붙이라네요) ^^


13일째 새벽 3시쯤에 가려움 증이 재발했었는데, 오늘 아침에 자석을 붙이니 현재(오전 11시 48분)모두 사라지고 얼굴피부도 매끈해졌다. 손까진 부분은 원상복구 되었다. 전체적인 상태는 계속 좋아지고 있다. 이 현상은 일상 반복되고 있다.


오후 4:40분에 자석 제거후 손까짐이 완화되고 있다.


오늘도 좋아진 상태가 1가지 추가로 발견됐다. 콧수염에 몇가닥 흰수염이 났는데 까맣게 변하면서 사라졌다. 턱수염은 하도 많은 흰수염이 있어서 확실하진 않지만, 콧수염은 기억이 난다. 3가닥이 흰수염이었던 것을.. ^^




[15일째]

15일째, 12시를 넘어 15일째를 갓 넘겨서 우유를 2잔이나 먹었는데 아침까지 설사도 안했다. 30년만에 우유를 맛잇게 먹었다. 한 모금만 먹어도 화장실에 달려가야 했는데... 우유를 소화하지 못하는 것도 간에 문제가 있었던 것 같다. 중학교 때부터 간이 안좋았었구나. 아뭏든 오늘도 아침 8시30분에 간에 자석을 N극으로 붙였다.


간에 자석을 붙이는 방법은 특정한 혈에 붙일 필요는 없는듯 하다. 오늘은 또 다른 위치에 붙였는데 효과가 동일하다.


위치를 가운데로 1cm 가량 옮겼다. 효과는 같다.



요즘에 간에 N극으로 자석을 붙이면 매우 빨리 N극 임계점으로 가는데, 반대로 S극의 임계점으로 가는 시간이 길어졌다. 어제는 새벽 3시쯤에 S극의 임계점이 와서 가려운 증상이 생겼는데, 오늘은 가렵지도 않은 듯 하다. 내가 잠을 자서 못 느낀 것일 수도 있다. 하지만 아침에 자석 붙이기 전의 손바닥이 까지는 증상은 훨 씬 덜하다.
손은 까져도 몸상태는 항상 더 좋아짐을 느낀다.


점점 더 빨리 N극 임계점이 오는 구나. 오늘은 3:50분에 자석을 뗐다. 손이 까질라고 하고 살살 배도 아팠다. 떼니까 좋아진다.



[16일째]

16일째, 어제 자석을 뗀 상태에서 친구들과 소주와 맥주를 먹었는데, 아침에 일어났을 때 간염 증상이 전혀 없다. 술이 많이 늘은 것 같다. ^^

아침 9시경에 자석을 다시 붙였다.


이제 몇시간만에 N극의 임계치에 도달하는 듯하다. 자석을 붙이면 더 안좋아지는듯? 손바닥에 뭐가 난다. 어제 먹은 술때문인지를 확인하기 위해서 조금 더 붙여 놓겠다. (9시경에 붙였는데 3시간만에 상태가 변하는 듯 하다)


 어제 술먹은 영향으로 손에 뭐가 났었던 것 같다. 술먹은 다음날은 좀 오래 붙여야 하나보다. 현재 9시간째 붙여 놓았는데, N극 임계치로 갈 때 증상이 안나타나고 있다. ^^


술은 늘었지만, 이러다간 알콜 중독 걸리지나 않을까 싶다. 너무 먹고 다니는 듯 싶다.


술을 먹고 테스트를 해서 그런지 모르겠는데, N극을 붙인후 부작용이 없으면 계속 붙여 놓는게 맞는듯 하다. 오늘은 거의 12시간을 붙였는데 부작용이 없다. 저녁을 안먹어서 소화불량 증상이 있는지를 못 느껴서 일 수도 있다.


아! 오늘의 자석 붙이는 위치는 다음과 같다. 효과는 동일한 듯 하다.




아 너무~ 오래 붙였더니 손 여기저기 뭐가 나버렸네요... 12시까지 붙인게 잘못한 것이었군. 아 정말 센서가 있어야 해. 간지럽다.




[17일째]

17일째, 요즘은 자석을 붙이면 손에 뭐가 난다. N극의 임계점에 빨리 도달하는 듯 하다. 다시 한 번 자석을 붙여보고 또 손에 뭐가 나면 바로 뗄 생각이다. 현재 오전 10:56, 간에 자석을 붙인다.


오후 1:07 까지 손까짐이 약간 완화 되었다. 약 2시간 가량 자석을 간에 붙인 셈이다. 즉 크게 좋아지진 않는다. 더 나빠지지 않는 수준이다. 그러니까, 자석 효과가 별로 없어진 상태라고 봐도 될 것이다. 자석을 붙이나 떼나 별 차이가 없다는 말도 된다. 자석을 떼도 괜찮은 상태가 된 듯 한다. 몸은 안 붙였던 때보다 훨씬 좋아 졌으니 치료가 완료 된 것으로 봐야 할까? 1시간만 있다가 떼야겠다.


오후 1:27, 혹시 간 상태는 좋으나, 간염균에 의해 상태가 안좋아질 수도 있으므로 MMS를 한번 복용해 본다.


자석치료 이전에는 MMS 만 2일에 1번 복용해 왔었고, 손바닥 까지는 증상은 잡았었다. 이 때는 점심 먹으면 설사하고, 아침에 속이 안 좋아서 술도 많이 못먹었었다. 발도 무좀 걸린 것과 같은 상태였다. 손까짐 말고 모든 상태가 안좋았었다.



'건강' 카테고리의 다른 글

자석으로 간치료 시즌3  (1) 2018.10.14
자석으로 간치료 시즌 2  (0) 2018.10.14
태양광 계산기
테스트 값 계산

태양광셀 입력 항목 태양광셀 입력 파라메터 단위
1.태양광셀 최대 입력 전압 V
2.태양광셀 최대 입력 전류 A
3.BAT 충전 출력 전압(STAGE0,2 MODE Voltage) V
4.BAT 충전 최대 출력 전류 A

태양광셀 입력 항목 태양광셀 입력 파라메터 단위
테스트 값 계산 A
태양광셀 입력 항목 태양광셀 입력 파라메터
1.태양광셀 최대 입력 전압


2.태양광셀 최대 입력 전류
3.BAT 충전 출력 전압(STAGE0,2 MODE Voltage)
4.BAT 충전 최대 출력 전류


이번에 CUBEMX 를 업데이트하고 나서, USB CDC 를 테스트 해 봤습니다.


예전에, USBD_CDC.h 파일에서 수정해야 동작하던 상수값이, 
이번 버전(Ver 4.23.0)의 CUBE MX 에서는 제대로 생성해 주는 것을 확인했고,
몇가지 간단하게 수정하면 USB CDC 를 바로 쓸 수가 있었습니다.




usbd_cdc.h  예전의 설정 (USB COM Port 장치 에러 발 생)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/** @defgroup usbd_cdc_Exported_Defines
  * @{
  */ 
#define CDC_IN_EP                                   0x81  /* EP1 for data IN */
#define CDC_OUT_EP                                  0x01  /* EP1 for data OUT */
#define CDC_CMD_EP                                  0x82  /* EP2 for CDC commands */
 
/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
#define CDC_DATA_HS_MAX_PACKET_SIZE                 512  /* Endpoint IN & OUT Packet size */
#define CDC_DATA_FS_MAX_PACKET_SIZE                 64  /* Endpoint IN & OUT Packet size */
#define CDC_CMD_PACKET_SIZE                         8  /* Control Endpoint Packet size */ 
 
#define USB_CDC_CONFIG_DESC_SIZ                     67
#define CDC_DATA_HS_IN_PACKET_SIZE                  CDC_DATA_HS_MAX_PACKET_SIZE
#define CDC_DATA_HS_OUT_PACKET_SIZE                 CDC_DATA_HS_MAX_PACKET_SIZE
 
#define CDC_DATA_FS_IN_PACKET_SIZE                  CDC_DATA_FS_MAX_PACKET_SIZE
#define CDC_DATA_FS_OUT_PACKET_SIZE                 CDC_DATA_FS_MAX_PACKET_SIZE
cs


usbd_cdc.h  새로 수정된 내용(CDC_DATA_HS_MAX_PACKET_SIZE 값이 256 으로 초기설정됨)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/** @defgroup usbd_cdc_Exported_Defines
  * @{
  */ 
#define CDC_IN_EP                                   0x81  /* EP1 for data IN */
#define CDC_OUT_EP                                  0x01  /* EP1 for data OUT */
#define CDC_CMD_EP                                  0x82  /* EP2 for CDC commands */
 
/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
#define CDC_DATA_HS_MAX_PACKET_SIZE                 256  /* Endpoint IN & OUT Packet size */
#define CDC_DATA_FS_MAX_PACKET_SIZE                 64  /* Endpoint IN & OUT Packet size */
#define CDC_CMD_PACKET_SIZE                         8  /* Control Endpoint Packet size */ 
 
#define USB_CDC_CONFIG_DESC_SIZ                     67
#define CDC_DATA_HS_IN_PACKET_SIZE                  CDC_DATA_HS_MAX_PACKET_SIZE
#define CDC_DATA_HS_OUT_PACKET_SIZE                 CDC_DATA_HS_MAX_PACKET_SIZE
 
#define CDC_DATA_FS_IN_PACKET_SIZE                  CDC_DATA_FS_MAX_PACKET_SIZE
#define CDC_DATA_FS_OUT_PACKET_SIZE                 CDC_DATA_FS_MAX_PACKET_SIZE
cs

그래서 수정할 내용은, 
1. #include 에서 usbd_cdc_if.h 추가하고,
1
2
#include "string.h"
#include "usbd_cdc_if.h"
cs

2. 저는 보통 cdc를 디버그 출력용으로만 사용해서 Txd 기능만 주로 사용합니다.
  - 그리고, 쓰기 편하게 printf() 함수를 사용하다 보니, string.h 파일을 include 해 줍니다.
    USB_FS 로  printf() 함수를 사용하기 위한 추가 코드는 다음과 같습니다. main.c 파일의 User code 에 추가해 주면 됩니다.
 main.c 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* USER CODE BEGIN 0 */
#ifdef __GNUC__
 #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
 #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
 
PUTCHAR_PROTOTYPE
{
 while(CDC_Transmit_FS((uint8_t *)&ch, 1== USBD_BUSY);
 return ch;
}
 
/* USER CODE END 0 */
cs
  - JTAG 나 SSTLINK 디버거용 핀을 보드에 배치하면 보드 크기가 커져서, 저는 USB CDC를 디버깅 기능으로 사용합니다.
  - USB 만 연결해서, 프로그램 다운로드는 USB DFU 를 사용하고, 디버깅이 필요할 시 USB CDC 를 사용하면 편리합니다. ^^

3. 위 설정만 완료하면, USB COM Port 로 PC 와 통신하면 됩니다.




다음은 간단한 USB CDC 출력 테스트 프로그램입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f4xx_hal.h"
#include "usb_device.h"
 
/* USER CODE BEGIN Includes */
#include "string.h"
#include "usbd_cdc_if.h"
 
/* USER CODE END Includes */
 
/* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c1;
 
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
 
/* USER CODE END PV */
 
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
 
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
 
/* USER CODE END PFP */
 
/* USER CODE BEGIN 0 */
#ifdef __GNUC__
 #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
 #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
 
PUTCHAR_PROTOTYPE
{
 while(CDC_Transmit_FS((uint8_t *)&ch, 1== USBD_BUSY);
 return ch;
}
 
/* USER CODE END 0 */
 
int main(void)
{
 
  /* USER CODE BEGIN 1 */
 
  /* USER CODE END 1 */
 
  /* MCU Configuration----------------------------------------------------------*/
 
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
 
  /* USER CODE BEGIN Init */
 
  /* USER CODE END Init */
 
  /* Configure the system clock */
  SystemClock_Config();
 
  /* USER CODE BEGIN SysInit */
 
  /* USER CODE END SysInit */
 
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USB_DEVICE_Init();
 
  /* USER CODE BEGIN 2 */
 
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
        printf("USB CDC Test ^^\r\n");
        HAL_Delay(500);
  /* USER CODE END WHILE */
 
  /* USER CODE BEGIN 3 */
 
  }
  /* USER CODE END 3 */
 
}
cs


터미날 프로그램으로 테스트한 내용입니다.



alpu_v100.zip


지난 번의 IDLE IT 를 사용한 DMA 테스트는 UART2에서 한 테스트였고,

이번에는 UART1 에서 테스트를 해 봤다.

수정할 내용만 적어 보면 다음과 같다.

UART1 인터럽트함수의 코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
    /* Check for IDLE flag */
    if (USART1->SR & UART_FLAG_IDLE) {         /* We want IDLE flag only */
        /* This part is important */
        /* Clear IDLE flag by reading status register first */
        /* And follow by reading data register */
        volatile uint32_t tmp;                  /* Must be volatile to prevent optimizations */
        tmp = USART1->SR;                       /* Read status register */
        tmp = USART1->DR;                       /* Read data register */
        (void)tmp;                              /* Prevent compiler warnings */
        __HAL_DMA_DISABLE(&hdma_usart1_rx);
    }    
    return;
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
 
  /* USER CODE END USART1_IRQn 1 */
}
cs
 
UART1 의 DMA 인터럽트는 DMA2_Stream2_IRQHandler 함수를 사용한다.
코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
void DMA2_Stream2_IRQHandler(void)
{
  /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */
    size_t len, tocopy;
    uint8_t* ptr;
    
    /* Check transfer complete flag */
    if (DMA2->LISR & DMA_FLAG_TCIF2_6) {
        DMA2->LIFCR = DMA_FLAG_TCIF2_6;           /* Clear transfer complete flag */
        
        /* Calculate number of bytes actually transfered by DMA so far */
        /**
         * Transfer could be completed by 2 events:
         *  - All data actually transfered (NDTR = 0)
         *  - Stream disabled inside USART IDLE line detected interrupt (NDTR != 0)
         */
        len = DMA_RX_BUFFER_SIZE - DMA2_Stream2->NDTR;
        tocopy = UART_BUFFER_SIZE - Write;      /* Get number of bytes we can copy to the end of buffer */
        
        /* Check how many bytes to copy */
        if (tocopy > len) {
            tocopy = len;
        }
        
        /* Write received data for UART main buffer for manipulation later */
        ptr = DMA_RX_Buffer;
        memcpy(&UART_Buffer[Write], ptr, tocopy);   /* Copy first part */
                
        
        /* Correct values for remaining data */
        Write += tocopy;
        len -= tocopy;
        ptr += tocopy;
        
        /* If still data to write for beginning of buffer */
        if (len) {
            memcpy(&UART_Buffer[0], ptr, len);      /* Don't care if we override Read pointer now */
            Write = len;
        }
        
        /* Prepare DMA for next transfer */
        /* Important! DMA stream won't start if all flags are not cleared first */
        //DMA2->HIFCR = DMA_FLAG_DMEIF1_5 | DMA_FLAG_FEIF1_5 | DMA_FLAG_HTIF1_5 | DMA_FLAG_TCIF1_5 | DMA_FLAG_TEIF1_5;
        DMA2->LIFCR = DMA_FLAG_DMEIF2_6 | DMA_FLAG_FEIF2_6 | DMA_FLAG_HTIF2_6 | DMA_FLAG_TCIF2_6 | DMA_FLAG_TEIF2_6;
        DMA2_Stream2->M0AR = (uint32_t)DMA_RX_Buffer;
        DMA2_Stream2->NDTR = DMA_RX_BUFFER_SIZE;
        __HAL_DMA_ENABLE(&hdma_usart1_rx);
        //DMA1_Stream5->CR |= DMA_SxCR_EN;            /* Start DMA transfer */
    }
    return;
  /* USER CODE END DMA2_Stream2_IRQn 0 */
  HAL_DMA_IRQHandler(&hdma_usart1_rx);
  /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */
 
  /* USER CODE END DMA2_Stream2_IRQn 1 */
}
cs

main() 함수 코드 내용은 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
int main(void)
{
 
  /* USER CODE BEGIN 1 */
  /* USER CODE END 1 */
 
  /* MCU Configuration----------------------------------------------------------*/
 
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
 
  /* USER CODE BEGIN Init */
 
  /* USER CODE END Init */
 
  /* Configure the system clock */
  SystemClock_Config();
 
  /* USER CODE BEGIN SysInit */
 
  /* USER CODE END SysInit */
 
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
 
  /* USER CODE BEGIN 2 */
    __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
    HAL_UART_Receive_DMA(&huart1,DMA_RX_Buffer,DMA_RX_BUFFER_SIZE);
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
 
  /* USER CODE BEGIN 3 */
        if (Read != Write)
        { 
            __wfi();    // or __wfe();
            //__HAL_UNLOCK(&huart2);
            //__HAL_LOCK(&huart2);
            while (!(USART1->SR & USART_SR_TXE));   /* Wait till finished */
            USART1->DR = UART_Buffer[Read++];
            //HAL_UART_Transmit(&huart2,(uint8_t *)UART_Buffer[Read++],1,1);
            //while (!(USART2->SR & USART_SR_TC));   /* Wait till finished */
            //while (!(__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TXE))){};
                    
                    
            if (Read > UART_BUFFER_SIZE) /* Check buffer overflow */
            {     
                    Read = 0;
            }
        }
        //while(HAL_GPIO_ReadPin(B1_GPIO_Port,B1_Pin) == GPIO_PIN_RESET);
        //while(HAL_GPIO_ReadPin(B1_GPIO_Port,B1_Pin) == GPIO_PIN_SET);
        
  }
  /* USER CODE END 3 */
 
}
cs


이전 글에 이어서, 프로그램 동작 테스트를 해 보겠습니다.


CUBEMX에 의해 생성된 기본 코드에서, 추가할 내용은 다음과 같습니다.
[main.c]
1. UART_IT_IDLE 인터럽트 설정.
2. UART RX DMA 설정.

[stm32f4xx_it.c]
1. USART2_IRQHandler 함수에서, HAL_UART_IRQHandler 를 사용하지 않고(너무 느림), 
   IDLE 인터럽트만 처리하도록 수정. IDLE 인터럽트 발생시, DMA rx 인터럽트 강제 발생 후, DMA Disable.
2. DMA1_Stream5_IRQHandler 함수에서 HAL_DMA_IRQHandler 함수를 쓰지 않고,
   FIFO 에서 데이터를 사용자 UART 버퍼로 copy 해온 후, DMA Enable.


다음은 위의 내용에 대한 상세 설명 입니다.
[main.c]
1. UART_IT_IDLE 인터럽트 설정.
2. UART RX DMA 설정.
[기본 변수, 및 define 설정 내용]
1
2
3
4
5
6
7
#define UART_BUFFER_SIZE         1024
#define DMA_RX_BUFFER_SIZE         1024
 
uint8_t UART_Buffer[UART_BUFFER_SIZE];
uint8_t DMA_RX_Buffer[DMA_RX_BUFFER_SIZE];
size_t Write, Read;
 
cs
버퍼 Size 는 대충 잡은 것이니 적당히 수정하시기 바랍니다. 많으면 스택하고 메모리가 많이 들어가니까요.
[설정 코드]
1
2
    __HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE);
    HAL_UART_Receive_DMA(&huart2,DMA_RX_Buffer,DMA_RX_BUFFER_SIZE);
cs
링크 건, 블로그는 정말 복잡한데, HAL 로 하니 2줄이면 끝. (CUBEMX가 알아서 설정해 줘서 그렇습니다)

[stm32f4xx_it.c]
1. USART2_IRQHandler 함수에서, HAL_UART_IRQHandler 를 사용하지 않고(너무 느림), 
   IDLE 인터럽트만 처리하도록 수정. IDLE 인터럽트 발생시, DMA rx 인터럽트 강제 발생 후, DMA Disable.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* @brief This function handles USART2 global interrupt.
*/
void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */
    /* Check for IDLE flag */
    if (USART2->SR & UART_FLAG_IDLE) {         /* We want IDLE flag only */
        /* This part is important */
        /* Clear IDLE flag by reading status register first */
        /* And follow by reading data register */
        volatile uint32_t tmp;                  /* Must be volatile to prevent optimizations */
        tmp = USART2->SR;                       /* Read status register */
        tmp = USART2->DR;                       /* Read data register */
        (void)tmp;                              /* Prevent compiler warnings */
                __HAL_DMA_DISABLE(&hdma_usart2_rx);
 
        //DMA1_Stream5->CR &= ~DMA_SxCR_EN;       /* Disabling DMA will force transfer complete interrupt if enabled */
    }    
    return;
  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */
 
  /* USER CODE END USART2_IRQn 1 */
}
cs

위에서 HAL_UART_IRQHandler() 함수 전에 return; 을 사용해주면, 
간단히 이후의 코드 실행을 막을 수 있습니다. ^^

2. DMA1_Stream5_IRQHandler 함수에서 HAL_DMA_IRQHandler 함수를 쓰지 않고,
   FIFO 에서 데이터를 사용자 UART 버퍼로 copy 해온 후, DMA Enable.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
* @brief This function handles DMA1 stream5 global interrupt.
*/
void DMA1_Stream5_IRQHandler(void)
{
  /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */
    size_t len, tocopy;
    uint8_t* ptr;
    
    /* Check transfer complete flag */
    if (DMA1->HISR & DMA_FLAG_TCIF1_5) {
        DMA1->HIFCR = DMA_FLAG_TCIF1_5;           /* Clear transfer complete flag */
        
        /* Calculate number of bytes actually transfered by DMA so far */
        /**
         * Transfer could be completed by 2 events:
         *  - All data actually transfered (NDTR = 0)
         *  - Stream disabled inside USART IDLE line detected interrupt (NDTR != 0)
         */
        len = DMA_RX_BUFFER_SIZE - DMA1_Stream5->NDTR;
        tocopy = UART_BUFFER_SIZE - Write;      /* Get number of bytes we can copy to the end of buffer */
        
        /* Check how many bytes to copy */
        if (tocopy > len) {
            tocopy = len;
        }
        
        /* Write received data for UART main buffer for manipulation later */
        ptr = DMA_RX_Buffer;
        memcpy(&UART_Buffer[Write], ptr, tocopy);   /* Copy first part */
        
        /* Correct values for remaining data */
        Write += tocopy;
        len -= tocopy;
        ptr += tocopy;
        
        /* If still data to write for beginning of buffer */
        if (len) {
            memcpy(&UART_Buffer[0], ptr, len);      /* Don't care if we override Read pointer now */
            Write = len;
        }
        
        /* Prepare DMA for next transfer */
        /* Important! DMA stream won't start if all flags are not cleared first */
                DMA1->HIFCR = DMA_FLAG_DMEIF1_5 | DMA_FLAG_FEIF1_5 | DMA_FLAG_HTIF1_5 | DMA_FLAG_TCIF1_5 | DMA_FLAG_TEIF1_5;
                DMA1_Stream5->M0AR = (uint32_t)DMA_RX_Buffer;
                DMA1_Stream5->NDTR = DMA_RX_BUFFER_SIZE;
                __HAL_DMA_ENABLE(&hdma_usart2_rx);
        //DMA1_Stream5->CR |= DMA_SxCR_EN;            /* Start DMA transfer */
    }
        return;
  /* USER CODE END DMA1_Stream5_IRQn 0 */
  HAL_DMA_IRQHandler(&hdma_usart2_rx);
  /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */
 
  /* USER CODE END DMA1_Stream5_IRQn 1 */
}
cs


이렇게 하면, STM32 의 UART RX 에서 FIFO 가 없어서, 데이터를 놓칠 걱정은 더 이상 하지 않아도 됩니다. ^^

주의할 점이 하나 있는데, IDLE 인터럽트를 걸리도록 데이터를 PC 나 다른 장치에서 송신해야 한다는 점입니다.
파일을 전송하는 테스트를 진행해 본 결과, 
DMA RX Buffer 보다 큰 크기와 설정한 DMA 길이 보다 큰 데이터 스트링을 보낼 경우는 다음과 같이, 
송신하는 측에서 딜레이를 약간 줘야 합니다.

그래야, STM32 에서 DMA 데이터를 USER buff에 copy할 수 있습니다. 
저는 tera term 에서 line 당 지연을 1ms 줬습니다.







main.c 의 main() 에서 받은 데이터가 있으면, 그대로 term에 뿌리도록 해서,
파일을 전송 해 보니, 잘 수신 되었음을 알 수 있었습니다.





또 하나, 정말 모르겠던 부분이 있습니다.
HAL_UART_Transmit 함수로 사용해도 되긴 하는데, 너무 내부 코드가 많아서 바꿔 봤는데,
바꾼 코드가 아무리 해도 실행이 안되서, 앞에 __wfi() 나 __wfe() 를 넣어 보니 잘 돌아가더라고요.
순전히 ,  여러가지 넣어 보면서 허송 세월을 보내 버렸네요.
왜 이렇게 되는지 혹시 아시는분 댓글 부탁합니다. 
1
2
3
__wfi();    // or __wfe();
while (!(USART2->SR & USART_SR_TXE));   /* Wait till finished */
USART2->DR = UART_Buffer[Read++];
cs

위와 동일한 코드
1
HAL_UART_Transmit(&huart2,(uint8_t *)UART_Buffer[Read++],1,1);
cs


전체 main() 함수 내용.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
int main(void)
{
 
  /* USER CODE BEGIN 1 */
  /* USER CODE END 1 */
 
  /* MCU Configuration----------------------------------------------------------*/
 
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
 
  /* USER CODE BEGIN Init */
 
  /* USER CODE END Init */
 
  /* Configure the system clock */
  SystemClock_Config();
 
  /* USER CODE BEGIN SysInit */
 
  /* USER CODE END SysInit */
 
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART2_UART_Init();
 
  /* USER CODE BEGIN 2 */
    __HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE);
    HAL_UART_Receive_DMA(&huart2,DMA_RX_Buffer,DMA_RX_BUFFER_SIZE);
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
 
  /* USER CODE BEGIN 3 */
        if (Read != Write)
        { 
            __wfi();    // or __wfe();
            //__HAL_UNLOCK(&huart2);
            //__HAL_LOCK(&huart2);
            while (!(USART2->SR & USART_SR_TXE));   /* Wait till finished */
            USART2->DR = UART_Buffer[Read++];
            //HAL_UART_Transmit(&huart2,(uint8_t *)UART_Buffer[Read++],1,1);
            //while (!(USART2->SR & USART_SR_TC));   /* Wait till finished */
            //while (!(__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TXE))){};
                    
                    
            if (Read > UART_BUFFER_SIZE) /* Check buffer overflow */
            {     
                    Read = 0;
            }
        }
        //while(HAL_GPIO_ReadPin(B1_GPIO_Port,B1_Pin) == GPIO_PIN_RESET);
        //while(HAL_GPIO_ReadPin(B1_GPIO_Port,B1_Pin) == GPIO_PIN_SET);
        
  }
  /* USER CODE END 3 */
 
}
cs


keil 5 로 만든 코드와, cubemx ioc 파일을 첨부합니다.

uart_rx_dma.zip


휴, 밤새 테스트해보다 겨우 됐네요.


이번에 다룰 내용은, STM32F4xx 의 uart Rx 에서 DMA 함수를 사용하면 발생하는 불편함을 수정하는 내용입니다.
DMA를 사용하면, RX data를 수신할 때, 1-Byte마다 인터럽트가 걸리지 않으므로 그 시간만큼 다른 일을 할 수가 있습니다.
일종의 코프로세서라고 말하는 사람도 있습니다. 또는 듀얼코어..

그런데 UART DMA RX 는 HAL 함수에서, 또는 다른 라이브러리 함수에서(다른 함수들은 안써봐서 잘 모름),
지정한 길이 만큼만 받아야 인터럽트가 발생해서,
지정한 길이만큼 받지 않으면 데이터를 갖고 올 수가 없었습니다.

또한 UART RX 시에는 언제, 몇개의 데이터가 들어 올지 미리 알 수가 없는 상황이 대부분이라,
저 같은 경우에는 UART RX DMA를 쓰는 경우는 전혀 없습니다. 쓰려면 TX DMA 를 쓰죠.

예를 들자면 
HAL_UART_Receive_DMA(&huart2,DMA_RX_Buffer,10); 
위와같이 특정 개수 만큼(10개) DMA 로 받겠다고 하면, 
10개 이하는 DMA 인터럽트가 안 떠서 데이터를 못 받고,
10개 이상 받으면, 10개는 받고 나머지 10개 이상은 받지 못하게 됩니다.

이와 같은 점을 수정한 방법이 UART_IDLE 인터럽트를 쓰는 방법입니다.
UART_IDLE 인터럽트는 데이터를 수신하다가 1개 이상 데이터가 수신되지 않을 시 걸리는 인터럽트입니다.
보통 연속으로 데이터가 오다가, 다 보냈을 경우 1개 이상의 데이터가 수신되지 않는 경우가 무조건 발생하게 됩니다.
이 때, UART RX DMA 인터럽트를 강제로 발생시키도록 하는 원리 입니다.

이 내용은, 예전부터 외국 블로그에서 공개한 내용인데 실제로 사용할 수 있도록 테스트를 해 보지 못했습니다.
참고로 한 사이트 주소는 다음과 같습니다.


사용한 H/W 는 ST 의 NUCLEO-F411RE 입니다.
UART만 테스트 하는 거라, 이미 내부 디버거(ST-LINK)에 의해 USB-to-UART 연결된 UART2를 사용했습니다.

H/W 구성 및 CUBEMX 설정은 다음과 같습니다.




+ Recent posts